Вызов идентификатора Jsf View с не-JSF-страницы

Мы интегрируем новое приложение с существующим JSP-приложением и пытаемся использовать некоторые из существующих функций. У меня есть правило навигации в faces-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>

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

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

Ответы

Ответ 1

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

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

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