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

Итак, вопросы:

  1. Почему, если я на странице входа, я получаю исключение ViewExpiredException? это из-за ajax?
  2. Как или где я могу сделать, чтобы 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" />

Смотрите также:

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