<a href> ссылка навигации не обнаруживает шаблоны на страницах JSF 2.0 Facelets - PullRequest
0 голосов
/ 13 декабря 2011
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets">

<h:body>
    <title><ui:define name="title">Page 2</ui:define></title>
    <ui:composition template="template/common/commonLayout.xhtml">
        <ui:define name="content">
            This is the content of Page 2 page<br/>
            <h:form prependId="false">
                <h:commandButton id="goToIndex" value="Go to Index" action="index" />
            </h:form>
            <a href="index.xhtml">Index</a>
        </ui:define>

    </ui:composition>

</h:body>
</html>

У меня есть две идентичные страницы Facelets: index.xhtml и page2.xhtml, которые ссылаются друг на друга. У меня также есть файл шаблона. Нет никакой разницы в коде между index и page2, за исключением названия страниц в заголовке, текста содержимого и значений commandButton.

Когда я нажимаю кнопку goToIndex, реализованную в форме, чтобы перейти к index.xhtml, все работает как положено: оно переходит к index.xhtml. Однако, когда я нажимаю на ссылку, реализованную по ссылке [a href], чтобы перейти к index.xhtml, он переходит к index.xhtml, но, похоже, игнорирует все настройки шаблона для страницы, включая любой тег формы. Единственная визуализируемая вещь - это текст, содержащийся в определении «содержимого», но без какого-либо форматирования CSS.

Это происходит в обоих направлениях. "index -> page2" и "pag2 -> index"

Есть идеи, почему это происходит?

1 Ответ

4 голосов
/ 13 декабря 2011

Страница, которая вызывается <a href ...>, не обрабатывается сервлетом лица и, следовательно, неправильно переведена и не включает css / js.

Загляните в свой web.xml и проверьте, как отображается сервлет лиц. Там вы можете найти что-то вроде:

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

Вы можете изменить шаблон на:

<url-pattern>*.xhtml</url-pattern>

Тогда все файлы с префиксом xhtml будут обработаны сервлетом Faces. Однако это может вызвать проблемы, если в вашем проекте префикс xhtml используется для других целей, кроме facelets.

Другой способ - использовать h:link вместо a:href:

<h:link value="Index" outcome="index" >

, где атрибут результата занимает целевую страницу без .xhtml.

...