JSF неправильное перенаправление при перехвате ViewExpiredException
Так что у меня есть обработчик ViewExpiredException и работает нормально. Теперь, когда я запускаю веб-приложение, мой URL выглядит так www.myApp.com/TestFaces/
и это представляет первую страницу, которая является страницей входа. Если по какой-либо причине я покидаю страницу при входе в систему, и срок действия представления истекает, приложение ловит исключение ViewExpiredException и отправляет меня на страницу "ViewExpired", НО URL-адрес остается прежним. www.myApp.com/TestFaces/
, На этой странице "ViewExpired" у меня есть commandLink для возврата на страницу входа, которая в значение attrib я помещаю "index.xhtml", НО она не отправляет меня на страницу входа, потому что на странице нет www.myApp.com/TestFaces/index.xhtml
но в www.myApp.com/TestFaces/faces/index.xhtml
Итак, вопросы:
- Почему, если я на странице входа, я получаю исключение ViewExpiredException? это из-за ajax?
- Как или где я могу сделать, чтобы commandLink действительно отправлял меня в index.xhtml?
Это происходит только тогда, когда срок действия представления истекает на странице входа в систему, а на других страницах моего приложения это работает очень хорошо.
Заранее спасибо!
1 ответ
Почему, если я на странице входа, я получаю исключение ViewExpiredException? это из-за ajax?
Вы получите это исключение, когда вызовете запрос POST для представления, которое больше не существует в сеансе. Это может произойти, например, когда вы слишком долго открываете страницу, когда срок сеанса истекает на стороне сервера, или когда вы получаете страницу входа из кэша браузера, а не прямо с сервера. Для более подробной информации смотрите также наш ViewExpiredException
страница информации о тегах. Все запросы JSF ajax также учитываются в этом, поскольку они также используют POST.
Как или где я могу сделать, чтобы commandLink действительно отправлял меня в index.xhtml?
Используйте неявную навигацию. Таким образом, JSF добавит правильное FacesServlet
отображение.
public String goToIndexPage() {
return "index";
}
или же
<h:commandLink value="Go to index page" action="index" />
или, лучше, когда вам вообще не нужно вызывать какую-либо бизнес-логику:
<h:link value="Go to index page" outcome="index" />