Обработка ViewExpiredException в зависимости от текущего представления - PullRequest
3 голосов
/ 27 сентября 2011

Я использую JSF 2.0 и Primefaces в своем проекте.

У меня есть две xhtml-страницы, а именно Cars.xhtml и Bikes.xhtml.

Я использую бобы ViewScoped.

В настоящее время Если исключение get view expired из любой из двух страниц, я обрабатываю его в файле web.xml. через тег страницы ошибок и направив на welcome.xhtml.

Теперь, если я получу исключение viewExpired из Bikes.xhtml Мне нужно перейти на другую страницу, которая является BikesHome.xhtml вместо welcome.xhtml.

Если исключение сделано из Cars.xhtml, должен быть показан welcome.xhtml.

Пожалуйста, помогите мне, как это сделать.

1 Ответ

8 голосов
/ 27 сентября 2011

Я не уверен на 100% в этом (потому что я сам не пробовал), но вот мое предложение - Проверить это Изящно работать с ViewExpiredException в JSF2 .

if (t instanceof ViewExpiredException) {
    ViewExpiredException vee = (ViewExpiredException) t;

В этот момент вы можете получить view id следующим образом -

vee.getViewId();

И затем на основе view id выполнить желаемую навигацию.

NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
//check condition, set view       
nv.handleNavigation(facesContext, null, "/view-id?faces-redirect=true");
facesContext.renderResponse();

Или, я думаю, вы также можете сделать -

FacesContext.getExternalContext().redirect(url);
FacesContext.responseComplete();

для перенаправления.

...