页面加载时JSF重定向

时间:2010-03-05 10:59:40

标签: java jsf redirect

简短问题:是否可以进行重定向,例如当用户未登录时,何时呈现页面?

4 个答案:

答案 0 :(得分:9)

为此你should使用Filter

E.g。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        ((HttpServletResponse) response).sendRedirect("error.jsf"); // Not logged in, so redirect to error page.
    } else {
        chain.doFilter(request, response); // Logged in, so just continue.
    }
}

这里我假设User已经按照您通常的预期放在会话范围内。它可以是名为user的会话作用域JSF托管bean。

导航规则不适用,因为在正常GET请求期间无法执行“bean操作”。在即将构建托管bean时进行重定向也无法工作,因为在正常GET请求期间构建托管bean时,响应已经开始呈现,这是一个点无回报(它只会产生IllegalStateException: response already committed)。 PhaseListener很麻烦且非常庞大,因为您实际上不需要监听任何JSF阶段。您只想听取“普通”HTTP请求以及会话范围中某个对象的存在。为此,过滤器是完美的。

答案 1 :(得分:3)

是的:

if(!isLoggedIn) {
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}

答案 2 :(得分:1)

您可以使用PhaseListener指定何时进行重定向。

答案 3 :(得分:1)

PhaseListener尝试:

FacesContext ctx = FacesContext.getCurrentContext();
ctx.getApplication().getNavigationHandler()
     .handleNavigation(ctx, null, "yourOutcome");
相关问题