JSF中的条件重定向

时间:2011-12-06 11:18:02

标签: jsf redirect

是否存在有条件地重定向到另一个视图的内置机制?如果用户已经登录,我希望将用户从登录页面重定向到“主页”。

我已经有两种基本方法,但是第一种我不知道如何实现,第二种方法是一种肮脏的解决方法。

  1. 添加<meta http-equiv="Refresh" content="0; URL=home.jsf" />并让它有条件地呈现(EL:#{login.loggedIn}
  2. 添加<h:panelGroup />也会有条件地呈现,其中包含一些执行重定向的JavaScript。
  3. 有没有办法实现 1 甚至是另一种更优雅的解决方案? : - )

    由于

2 个答案:

答案 0 :(得分:19)

您可以使用<f:event type="preRenderView">

E.g。

<f:event type="preRenderView" listener="#{login.checkAlreadyLoggedin}" />

public void checkAlreadyLoggedin() throws IOException {
    if (isLoggedIn()) {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
    }
}

答案 1 :(得分:0)

@BalusC提出的解决方案在视图'home.xhtml'不是JSF portlet的默认视图时不起作用。对于那些需要在呈现阶段重定向到非默认视图的人,我建议在this entry内设置解决方案。也就是说,在preRenderView方法中执行以下操作:

FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, "/views/nonDefaultView.xhtml?faces-redirect=true");
fc.renderResponse();

@Frizz1977

的信用