3

我正在使用 JSF2.0 Mojarra 2.0.2。

我有一种方法可以注销用户并将注销消息放入闪存中,然后转发到登录页面(其中有一个打印出闪存的 div)。但是,当我出于某种原因使用 navigationHandlers 的 handleNavigation 方法时,没有显示 Flash。如果他/她没有登录,我有一个类似的方法将用户转发到登录页面。

如果我通过 h:link 处理导航并直接调用 logout 方法,flash 会正常显示,但如果我使用 handleNavigation() 方法,flash 会由于某种原因被清除。

有问题的代码是:

public void performLogout()
{
    getFacesContext().getExternalContext().invalidateSession();
    setCurrentUser(null);
    getFlash().put("notice", "Successfully logged out.");
    super.getFacesContext().getApplication().getNavigationHandler()
            .handleNavigation(getFacesContext(), null, "login");
}

像这样导航时有什么方法可以保持闪光灯?

谢谢。

编辑:我相信这个问题与另一个问题有关,当 xhtml 页面位于不同的目录时,在重定向期间没有保留闪存:http: //java.net/jira/browse/JAVASERVERFACES-1635

4

1 回答 1

2

你是对的。

JSF 2 flash 范围目前非常错误,根据规范,可能几乎无法使用:http: //javaserverfaces.java.net/nonav/docs/2.0/javadocs/index.html

如果您想要如下工作的闪存范围,请考虑使用 CDI 和 Seam Faces 的闪存范围 - http://docs.jboss.org/seam/3/faces/reference/snapshot/en-US/html_single /#flashscoped

“从对象被放置在范围内的那一刻起,闪存范围应该处于活动状态,直到响应完成渲染。”

- 林肯

于 2010-08-18T18:27:46.137 回答