2015-03-19 210 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在頁面上呈現所有需要的信息。

相關問題