是否存在有条件地重定向到另一个视图的内置机制?如果用户已经登录,我希望将用户从登录页面重定向到“主页”。
我已经有两种基本方法,但是第一种我不知道如何实现,第二种方法是一种肮脏的解决方法。
<meta http-equiv="Refresh" content="0; URL=home.jsf" />
并让它有条件地呈现(EL:#{login.loggedIn}
)<h:panelGroup />
也会有条件地呈现,其中包含一些执行重定向的JavaScript。有没有办法实现 1 甚至是另一种更优雅的解决方案? : - )
由于
答案 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();
的信用