Использование .xhtml и JSP в одном приложении - PullRequest
0 голосов
/ 14 октября 2011

Я нашел это Смешивание JSP и XHTML (Facelets) в проекте JSF2 - возможно? , когда я искал способ использовать .jsp и .xhtml вместе.

На этот вопрос отвечает ссылка на FAQ, в которой говорится, что я должен использовать префиксное сопоставление, но не могу понять, как. Я понимаю, что должен добавить facelets.VIEW_MAPPINGS, но я не могу понять формулировку "Вы должны использовать префиксное сопоставление".

В основном я должен получить доступ к моей странице с / лиц / включенным, как: "http://localhost:8080/webapp/faces/mypage.xhtml"

Но если я попытаюсь добавить / Faces / вручную, то получится 404. И я не уверен, следует ли добавлять его автоматически при запуске приложения.

Мой файл приветствия представляет собой HTML-страницу, которая использует: <body bgcolor="#FFFFFF" onload="window.location='/portal/login/login.xhtml'">

Должно ли это быть .xhtml, а не .jsf?

Прежде чем пытаться смешаться со страницами JSP и только пробовать JSF2, я успешно запустил его так:

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

 <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Вместо этого использование / Faces / * кажется обязательным, но я просто не понимаю, как правильно его использовать.

Я пытаюсь это так:

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

<!-- Use extensions mapping for Faces servlet -->
<context-param>
    <param-name>facelets.VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jsp</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Это касается большого приложения, созданного на чистых страницах jsp и страницах jsp с JSF 1.2. По сути, я конвертирую все страницы JSF в JSF2 и, следовательно, XHTML.

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Префиксное сопоставление - это сопоставление папок, подобное /faces/*. Suffix mapping - это расширение расширений, подобное *.jsf. В вашем файле приветствия используется хакерская строка JS, которая меняет местоположение (почему бы вам просто не указать этот URL вместо <welcome-file>?). Этот URL-адрес местоположения также должен включать /faces сопоставление.

Другое (лучше IMO) решение в JSF 2.0 - вместо этого использовать *.jsf, удалить все остальные параметры контекстного параметра и оставить его по умолчанию. JSF сначала сканирует на page.xhtml, а если он не существует, то сканирует на page.jsp. Итак, все, что у вас есть в web.xml, должно быть:

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Я не ответил на вопрос, который вы связали, потому что я не знал этого в тот момент.

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

0 голосов
/ 30 ноября 2011

Хотя вышеупомянутое предложение действительно сработало, я не хотел менять URL-адреса каждый раз, и я заставил предисловие работать, используя правильный параметр.

не работает:

<context-param>
    <param-name>facelets.VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
</context-param>

работает:

<!-- Facelets pages will use the .xhtml extension -->
<context-param>
    <param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
</context-param> 
...