Этот код вообще не перенаправляет. Это просто пересылка запроса. Это просто использование одного и того же объекта запроса для другой целевой страницы). При реальном перенаправлении браузер отправляет новый запрос на указанный заголовок Location
. Вы видите, как это изменение отражается обратно в адресной строке браузера.
Вам необходимо либо добавить параметр faces-redirect=true
к результату, чтобы инициировать перенаправление (это особенно полезно, если вы используете неявную навигацию вместо подробных случаев навигации):
navigationHandler.handleNavigation(facesContext, from, outCome + "?faces-redirect=true")
Или добавить <redirect/>
к случаям навигации, если вы хотите, чтобы они всегда имели место:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>AD</from-outcome>
<to-view-id>/admin/admin.xhtml</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>US</from-outcome>
<to-view-id>/user/user.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
И последнее, но не менее важное: вам нужно убедиться, что handleNavigation()
вызывается до ответа, в противном случае он не будет работать вообще, а журналы вашего сервера будут завалены ошибками IllegalStateException: response already committed
, Вы можете использовать <f:event type="preRenderView">
для вызова действия bean-компонента до того, как ответ будет принят.
Смотри также: