2015-03-19 70 views
1

CommandButton显示咆哮。但是之前的咆哮信息丢失了。如何使咆哮显示消息堆栈?如何制作Primefaces咆哮堆栈消息?

例如:

<h:form> 
    <p:growl id="growl" showDetail="true" life="6000" /> 
    <p:commandButton value="Show" actionListener="#{growlView.showMessage}" update="growl" /> 
</h:form> 

和豆类功能:

public void showMessage() { 
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Hello")); 
} 

我按一下按钮,每一秒。我预计这些消息将存储并显示6秒钟。 但点击按钮后,以前的消息隐藏,我只看到当前消息。

当我调试我有:

FacesContext.getCurrentInstance().getMessageList().size() == 0 

我试图

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); 

<context-param> 
    <param-name>org.primefaces.messagePersistence</param-name> 
    <param-value>true</param-value> 
</context-param> 

但就是不起作用=(

请帮助

回答

3

不幸的是,这是不可能的。其实,这是默认的行为早在2011(上层叠咆哮的消息),但primefaces核心团队已经决定:

Ajax的更新显示新的之前隐藏以前的消息

来源:https://code.google.com/p/primefaces/issues/detail?id=1925

但是,创建了一个问题here(2014年10月)以恢复此功能,但尚未审查。

4

一个简单的解决方案,使用primefaces 5.1为那些想在同一个p:growl上以堆栈方式显示消息而不隐藏前面的消息的人,是覆盖将primefacesFixes.js文件添加到类路径的组件的默认行为,覆盖函数与下面的注释行:

primefacesFixes.js:

PrimeFaces.widget.Growl.prototype.show = function(b) { 
var a = this; 
this.jq.css("z-index", ++PrimeFaces.zindex); 
//this.removeAll(); //Commenting this line prevents an ajax update tho the <p:growl> from erasing global messages 
$.each(b, function(c, d) { 
    a.renderMessage(d); 
}); 

};

所以,你所说的修复文件中像这样在你的模板标签:

<h:outputScript name="javascript/primefacesFixes.js" target="head" /> 

而且只能使用一个p:growl在页面上呈现所有需要的信息。