Primefaces 根据严重性在两个p:growl中显示消息
我用的是PrimeFaces p:咆哮Primefaces 根据严重性在两个p:growl中显示消息,primefaces,message,growl,Primefaces,Message,Growl,我用的是PrimeFaces p:咆哮 <p:growl id="msgsInfo" rendered="true" showDetail="true" /> <p:growl id="msgsError" globalOnly="true" showDetail="true" sticky="true" /> 我需要在第一个咆哮中只显示Info消息,而在第二个咆哮中我需要显示
<p:growl id="msgsInfo"
rendered="true"
showDetail="true" />
<p:growl id="msgsError"
globalOnly="true"
showDetail="true"
sticky="true" />
我需要在第一个咆哮中只显示Info
消息,而在第二个咆哮中我需要显示Error
消息。
仅使用globalOnly
添加错误消息时,会显示2次
有什么想法吗?如果它支持
infoClass
,errorClass
等属性,比如h:messages
,理论上是可能的。然后,您可以只指定一个CSS类,该类执行显示:none
但是p:growl
不支持这些属性。在严重性级别上,您所能做的就是通过infoIcon
、errorIcon
等更改图标。因此,您在这里非常迷茫
也许值得一试
请注意,globalOnly=“true”
仅显示客户端ID为null的消息,无论其严重性如何。请参阅我的答案
PrimeFaces.widget.Growl.prototype.bindEvents = function(message) {
var _self = this,
sticky = this.cfg.sticky;
// Start hack
if (!sticky) {
// Your rule
}
...
您还可以找到生成以下页面的项目的源代码:
我正在寻找相同的功能(根据特定的消息严重性将咆哮设置为粘滞)。PrimeFaces(6.1)不提供此功能,但很容易破解。更具体地说,在bindEvents
功能中,他们检查是否配置了sticky
,并基于此:
//hide the message after given time if not sticky
if(!sticky) {
this.setRemovalTimeout(message);
}
因此,您可以对bindEvents
函数进行原型化(覆盖),并根据消息的严重性设置sticky
PrimeFaces.widget.Growl.prototype.bindEvents = function(message) {
var _self = this,
sticky = this.cfg.sticky;
// Start hack
if (!sticky) {
// Your rule
}
...
您还可以原型化renderMessage
,并将严重性作为参数添加到bindEvents
。我选择使用快速破解,并从类名
中读取它
我添加了以下实用功能:
var SEVERITIES = [ "info", "warn", "error", "fatal" ];
function getSeverity(domNode) {
// HACK Severity can be found in the className after the last - character.
var severity = domNode.className;
return severity.substring(severity.lastIndexOf("-") + 1);
}
function getSeverityIndex(severityString) {
return SEVERITIES.indexOf(severityString);
}
现在,您可以使用以下检查:
if (!sticky) {
sticky = getSeverityIndex(getSeverity(message[0])) >= getSeverityIndex("error");
}
我可能会在GitHub创建一个pull请求,您可以使用p:growl
组件上的stickSeverity
属性设置stick按摩的最低严重性
下面是完整的JavaScript攻击(PrimeFaces 6.1):
好的,如果我使用rendered=message\u severity?我曾经这样想,但我不知道如何实现这一点,因为这将应用于p:growl
组件本身,而不是它显示的每个消息。目前,您可以这样做。事实上,看起来它已经存在了一段时间,值得在github@Kukeltje我不确定他们是否会接受。可能他们只是说使用多个咆哮并使用severity
属性。