Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Primefaces 根据严重性在两个p:growl中显示消息_Primefaces_Message_Growl - Fatal编程技术网

Primefaces 根据严重性在两个p:growl中显示消息

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消息,而在第二个咆哮中我需要显示

我用的是PrimeFaces p:咆哮

<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
属性。