Вызов идентификатора Jsf View со страницы, отличной от JSF

Мы интегрируем новое приложение с существующим приложением JSP и пытаемся повторно использовать некоторые из существующих функций. У меня есть правило навигации в face-navigation.xml, как

<from-view-id>/WEB-INF/jsp/admin/login.xhtml</from-view-id>
<navigation-case>
    <from-outcome>success</from-outcome>
    <to-view-id>/WEB-INF/jsp/admin/welcome.xhtml</to-view-id>
</navigation-case>
<navigation-case>
    <from-outcome>admin</from-outcome>
    <to-view-id>/WEB-INF/jsp/admin/dashaboard.xhtml</to-view-id>
</navigation-case>
</navigation-rule>  

В моем JSP я пытаюсь назвать это определение как

<a href="/WEB-INF/jsp/admin/login.xhtml">Admin login </a>

Когда я нажимаю "Логин администратора", я получаю исключение для страницы, которая не найдена.

Есть ли другой способ назвать это представление?

1 ответ

Решение

Файлы в /WEB-INF не являются общедоступными (т.е. конечный пользователь не может открывать файлы в /WEB-INF непосредственно введя его голый URL в адресную строку браузера). Они доступны только сервлету, который делает RequestDispatcher#forward() в файле в /WEB-INF папка. Старый код установки веб-приложения, очевидно, использовал такой сервлет, либо доморощенный, либо из другой среды MVC.

Вы должны переместить эти страницы за пределы /WEB-INF папка. Я бы кстати тоже убрал обманчивых /jsp часть пути, поскольку эти файлы вообще не являются файлами JSP. Учитывая .xhtml расширение, вместо этого вы фактически используете его преемников Facelets.

Кстати, правила навигации устарели с JSF 2.0 благодаря новой функции "неявной навигации". Возможно, вы слишком много внимания уделяли целевым книгам / учебникам по JSF 1.x, изучая JSF?

Другие вопросы по тегам