Перенаправление PrettyFaces не работает с событием preRenderView - PullRequest
1 голос
/ 28 февраля 2012

У меня есть событие просмотра preRender в моем bean-компоненте, и я провожу в нем некоторую проверку для пользователя, и когда возникает какое-то условие, я перенаправляю пользователя на страницу входа в систему с использованием prettyFaces, но перенаправление не работает, я не знаю почему, вот код:

JSF:

<f:event type="preRenderView" listener="#{myBean.preRender}" />

Управляемый Боб:

public String preRender() {
        log.debug("preRender myPage for user " + userId);
        try {
            User user = userService.getUserById(userId);
            if (!user.isSomeCondition()) {
                log.debug("Bad Condition");
                return "pretty:login";
            }
        } catch (Exception e) {
            log.error("Error in preRender myPage for user "
                    + userId);
            return "pretty:login";
        }

        return null;
    }

1 Ответ

6 голосов
/ 28 февраля 2012

Вы не можете перемещаться, возвращая строку в методах прослушивателя действий.Это было бы полностью проигнорировано.Это возможно только в реальных методах действий, предусмотренных <h:commandXxx action="...">.

. Вместо этого вы можете вручную NavigationHandler#handleNavigation().

FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigator = context.getApplication().getNavigationHandler();
navigator.handleNavigation(context, null, "pretty:login");
.
...