JSF中的条件重定向

Kai*_*Kai 12 jsf redirect

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

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

  1. 添加<meta http-equiv="Refresh" content="0; URL=home.jsf" />,让它有条件地呈现(EL: #{login.loggedIn})
  2. 添加一个<h:panelGroup />也将有条件地渲染,包含一些执行重定向的JavaScript.

有没有办法实现1个甚至是另一个更优雅的解决方案?:-)

谢谢

Bal*_*usC 19

你可以用<f:event type="preRenderView">它.

例如

<f:event type="preRenderView" listener="#{login.checkAlreadyLoggedin}" />
Run Code Online (Sandbox Code Playgroud)

同

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

  • @Tiny:因为它是一个监听器方法而不是一个动作方法.从本质上讲,侦听器方法在这里被滥用.这就是为什么JSF的人在JSF 2.2中引入了`<f:viewAction>`,这应该是适合这项工作的工具. (2认同)