5

我正在使用 PrimeFaces p:growl。

<p:growl id="msgsInfo"
         rendered="true"
         showDetail="true" />
<p:growl id="msgsError"
         globalOnly="true"
         showDetail="true"
         sticky="true" />

我需要在第一个咆哮中只Info显示消息,而在第二个中我需要显示Error消息。globalOnly当我添加错误消息时使用这是显示 2 次。

任何的想法?

4

3 回答 3

3

如果它支持 , 等属性(如 as ),理论上是infoClass可能errorClassh:messages。然后,您可以只指定一个 CSS 类来执行display: none.

p:growl不支持这些属性。在严重性级别上,您所能做的就是将图标更改为infoIcon,errorIcon等。所以您在这里迷失了方向。

它可能值得一个功能请求

请注意,globalOnly="true"仅显示具有null客户端 ID 的消息,无论其严重性如何。

于 2011-01-16T12:32:58.063 回答
3

请看我的回答

PrimeFaces 咆哮动态改变颜色(多条消息)

您还可以找到生成以下页面的项目的源代码:

在此处输入图像描述

于 2016-10-18T08:37:46.273 回答
1

我一直在寻找相同的功能(将咆哮设置为从特定的消息严重性发出粘性)。PrimeFaces (6.1) 不提供此功能,但很容易破解咆哮的 JavaScript。更具体地说,在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. 我选择使用快速破解并从className.

我添加了这些实用功能:

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");
}

stickSeverity我可能会在 GitHub 上创建一个拉取请求,您可以在其中使用组件上的属性设置最小严重性以粘贴按摩p:growl

这是完整的 JavaScript hack(PrimeFaces 6.1):

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);
}

PrimeFaces.widget.Growl.prototype.bindEvents = function(message) {
    var _self = this,
    sticky = this.cfg.sticky;

    // Start customization
    if (!sticky) {
      sticky = getSeverityIndex(getSeverity(message[0])) >= getSeverityIndex("error");
    }
    // End customization

    message.mouseover(function() {
        var msg = $(this);

        //visuals
        if(!msg.is(':animated')) {
            msg.find('div.ui-growl-icon-close:first').show();
        }
    })
    .mouseout(function() {
        //visuals
        $(this).find('div.ui-growl-icon-close:first').hide();
    });

    //remove message on click of close icon
    message.find('div.ui-growl-icon-close').click(function() {
        _self.removeMessage(message);

        //clear timeout if removed manually
        if(!sticky) {
            clearTimeout(message.data('timeout'));
        }
    });

    //hide the message after given time if not sticky
    if(!sticky) {
        this.setRemovalTimeout(message);
    }
}
于 2017-05-07T17:11:49.193 回答