1

我的 bean 中有一个 preRender 视图事件,我在其中对用户进行了一些验证,当某些情况发生时,我使用 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;
    }
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 回答