Две основные вещи, которые вы должны знать об относительных ссылках (то есть те, которые не начинаются с 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">
Смотри также: