如何制作 Primefaces Growl 堆栈消息?
How to make Primefaces Growl stack messages?
CommandButton 显示咆哮。但是之前的咆哮信息丢失了。如何让 growl 显示消息堆叠?
例如:
<h:form>
<p:growl id="growl" showDetail="true" life="6000" />
<p:commandButton value="Show" actionListener="#{growlView.showMessage}" update="growl" />
</h:form>
和bean函数:
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>
但是不起作用=(
请帮忙
遗憾的是,这目前是不可能的。实际上,这是 2011 年的默认行为(堆叠咆哮消息),但 primefaces 核心团队已决定:
hide previous messages before displaying new ones on ajax update
来源:https://code.google.com/p/primefaces/issues/detail?id=1925
但是,here(2014 年 10 月)创建了一个问题来恢复此功能,但尚未审核。
使用 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
来呈现所有需要的消息。
在一个老问题上发布这个,但这可能是一个解决方案(尽管我使用的是 PFv6.2):
<p:growl id="messages" showDetail="true" keepAlive="true"/>
只需将 keepAlive="true"
添加到咆哮元素即可。
CommandButton 显示咆哮。但是之前的咆哮信息丢失了。如何让 growl 显示消息堆叠?
例如:
<h:form>
<p:growl id="growl" showDetail="true" life="6000" />
<p:commandButton value="Show" actionListener="#{growlView.showMessage}" update="growl" />
</h:form>
和bean函数:
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>
但是不起作用=(
请帮忙
遗憾的是,这目前是不可能的。实际上,这是 2011 年的默认行为(堆叠咆哮消息),但 primefaces 核心团队已决定:
hide previous messages before displaying new ones on ajax update
来源:https://code.google.com/p/primefaces/issues/detail?id=1925
但是,here(2014 年 10 月)创建了一个问题来恢复此功能,但尚未审核。
使用 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
来呈现所有需要的消息。
在一个老问题上发布这个,但这可能是一个解决方案(尽管我使用的是 PFv6.2):
<p:growl id="messages" showDetail="true" keepAlive="true"/>
只需将 keepAlive="true"
添加到咆哮元素即可。