1

BeanにpreRenderビューイベントがあり、ユーザーに対して検証を行います。何らかの条件が発生すると、prettyFacesを使用してユーザーをログインページにリダイレクトしますが、リダイレクトが機能しないようです。理由はわかりませんが、コードは次のとおりです。

JSF:

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

マネージドBean:

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;
    }
4

1 に答える 1

6

アクション リスナー メソッドで文字列を返すことによって移動することはできません。それは完全に無視されます。によって提供される実際のアクション メソッドでのみ可能<h:commandXxx action="...">です。

代わりにできることは、手動でNavigationHandler#handleNavigation().

FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigator = context.getApplication().getNavigationHandler();
navigator.handleNavigation(context, null, "pretty:login");
于 2012-02-28T13:09:01.883 に答える