Навигация с шаблоном Facelets не работает - PullRequest
5 голосов
/ 11 ноября 2011

У меня проблемы с навигацией при использовании Facelets.

У меня есть мастер-шаблон в /WEB-INF:

<h:body>
    <div id="container">
        <div id="header">
            <ui:insert name="header">Header</ui:insert>
        </div>

        <div id="navigation">

            <a href="ram.xhtml">RAM</a>
            <a href="mobo.xhtml">Motherboard</a>
            <a href="video.xhtml">Video Card</a>
        </div>

        <div id="content">
            <ui:insert name ="content"></ui:insert>
        </div>

    </div>
</h:body> 

, а затем 2 клиента шаблонов, которые выглядят одинаково, index.xhtml и ram.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./WEB-INF/layoutTemplate.xhtml">

    <ui:define name="header">
       some text
    </ui:define>

    <ui:define name="content"> 
        some content
    </ui:define>


</ui:composition>

Если любая из этих страниц установлена ​​в качестве страницы приветствия в web.xml, они отображаются правильно, с использованием CSS и всего остального.Но если я пытаюсь перейти с одной страницы на другую по ссылке, я получаю

Этот XML-файл, похоже, не связан с какой-либо информацией о стиле.Дерево документа показано ниже.

Будем благодарны за любые подсказки.

1 Ответ

6 голосов
/ 11 ноября 2011

Это означает, что URL запроса (как отображается в адресной строке браузера) не соответствует шаблону URL FacesServlet, как определено в web.xml.

Эти ссылки

<a href="ram.xhtml">RAM</a>
<a href="mobo.xhtml">Motherboard</a>
<a href="video.xhtml">Video Card</a>

ожидает, что FacesServlet будет сопоставлен с *.xhtml. Но если он сопоставлен, например, *.jsf и его изменение на *.xhtml по какой-то причине не подходит (я, однако, настоятельно рекомендую это сделать), то вам необходимо исправить ссылки

<a href="ram.jsf">RAM</a>
<a href="mobo.jsf">Motherboard</a>
<a href="video.jsf">Video Card</a>

Или, лучше, просто используйте <h:link>. Это неявно добавит правильный контекстный путь и отображение FacesServlet:

<h:link value="RAM" outcome="ram" />
<h:link value="Motherboard" outcome="mobo" />
<h:link value="Video Card" outcome="video" />

Смотри также:

...