【发布时间】:2011-03-21 13:34:18
【问题描述】:
我有一个页面做某事,当用户单击一个按钮时,用户被重定向到另一个页面并显示一条消息。这是我的代码:
public String confirm() {
FacesContext context = FacesContext.getCurrentInstance();
Flash flash = context.getExternalContext().getFlash();
flash.setKeepMessages(true);
FacesMessage msg = new FacesMessage("Succesful", "Release is confirmed!");
context.addMessage(null, msg);
return "/prot/expert/releases?faces-redirect=true";
}
我使用 p:growl 组件在“发布”页面上显示我的消息。到目前为止一切顺利。
但是在任何具有 p:growl 的后续页面上(或者如果我转到另一个页面并返回),该消息会一次又一次地显示,我无法杀死它。
我尝试了类似的方法:
<c:set target="#{flash}" property="keepMessages" value="false" />
在有 p:growl 的页面上,我尝试从 backing bean 等中清除 flash。
消息被保留并重新显示。如果我删除 flash.setKeepMessages(true);从上面的代码然后什么都不会显示。
我做错了什么?
【问题讨论】:
-
这很奇怪,我正在做几乎完全相同的事情,但使用 h:messages 标签而不是 p:growl 标签显示消息。消息按我的预期消失了。可以尝试使用 h:messages 来代替,看看它是否有效?
-
嗯,现在它正在工作。除了当用户按下后退按钮时,会显示消息,但我想这是正常行为。您是否尝试在第二页上将 flash.setKeepMessages() 设置为 false?
-
这里有一个 JIRA 问题:java.net/jira/browse/JAVASERVERFACES-1751 不敢相信这仍然是开放的,因为它完全破坏了闪存范围的功能。
-
这个(非常旧的)帖子报告了与您的问题类似的问题,并且与我在下面描述的完全相同的问题:java.net/projects/glassfish/lists/webtier/archive/2009-10/… Ed Burns 回答说他会做出反应,但似乎他从来没有这样做过。
标签: jsf jsf-2 primefaces flash-scope