JSF: гиперссылка на веб-страницу в подкаталоге / webapp - PullRequest
2 голосов
/ 31 января 2011

У меня есть список .xhtml страниц, которые я храню в своей папке / src / main / webapp / pages /.Теперь я хочу создать гиперссылки на них.В настоящее время работает только домашняя страница по умолчанию: /src/main/webapp/pages/default.xhtml.

  <!-- Welcome page -->
  <welcome-file-list>
    <welcome-file>/pages/default.xhtml</welcome-file>
  </welcome-file-list>

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

  <!-- Map these files with JSF -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

Для других, если у меня есть такая ссылка:

<a href="/pages/page1.xhtml">Page 1</a>

Я получаю следующую ошибку:

/ page1.xhtml Не найден в ExternalContext в качестве ресурса

Мой вопрос: как указать страницуЯ хочу в href относительно корня webapp .

1 Ответ

9 голосов
/ 01 февраля 2011

Две основные вещи, которые вы должны знать об относительных ссылках (то есть те, которые не начинаются с http://):

  • Относительные ссылки, начинающиеся с косой черты /, относятся к корню домена.
  • Относительные ссылки без косой черты относятся к URL-адресу запроса (как в адресной строке браузера).

Если текущий URL-адрес http://example.com/app и страница содержит ссылку

<a href="/pages/page1.xhtml">

тогда он будет указывать на http://example.com/pages/page1.xhtml (не удается).


Если текущий URL-адрес http://example.com/app и страница содержит ссылку

<a href="pages/page1.xhtml">

тогда он будет указывать на http://example.com/app/pages/page1.xhtml (работает).


Если текущий URL-адрес http://example.com/app/pages/default.xhtml и страница содержит ссылку

<a href="pages/page1.xhtml">

, тогда он будет указывать на http://example.com/app/pages/pages/page1.xhtml (ошибка).


Ваша проблема в том, что страница приветствия открывается перенаправлением, а не перенаправлением. Таким образом, URL-адрес запроса, который находится в адресной строке браузера, остается на http://example.com/app, в то время как он фактически отображает содержимое http://example.com/app/pages/default.xhtml. Чтобы ссылки работали при любых обстоятельствах, вам нужна ссылка типа

<a href="/app/pages/page1.xhtml">

Таким образом, включая контекстный путь, который является корнем веб-приложения. Если ваша единственная проблема заключается в том, что вы хотите включить контекстный путь динамически, просто напечатайте HttpServletRequest#getContextPath()

<a href="#{request.contextPath}/pages/page1.xhtml">

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...