验证器不显示在咆哮或消息中



我创建了一个自定义Validator,它可以与常见的p:message一起使用。但我会将这个验证器用于同一类型(整数(的多个字段,并以咆哮或消息的形式显示消息。但我注意到,这条信息几乎立即隐藏在咆哮和信息中。

这是我的咆哮(在模板中(:

<p:growl id="msgs" autoUpdate="true" showDetail="true" />

这是消息(在特定页面中(:

<p:messages id="messages" autoUpdate="true" closable="true" showDetail="true" />

怎么了?通常,使用addMessage时,模板咆哮会起作用。我还尝试在Validator的validate()方法中执行addMessage,但现在有两条消息消失了!

我也试着在咆哮中添加sticky="true",但什么都没有。

我很想把所有的p:message都添加到页面的顶部,并用JS删除其他的。。。

我正在使用Primefaces 3.4.1/Mojarra 2.1.7

在BalusC的帮助下,我解决了这个问题。

首先,我将autoUpdate="true"从";全局";咆哮和";本地";消息,如BalusC所建议的。这将对应用程序的其余部分产生影响,但这不是问题:D

问题是,如果我将验证器添加到两个或多个输入中,则会多次显示同一条消息。所以,在提交按钮上,我添加了

oncomplete="Util.removeErrorDuplicates('#messages');"

其中Util.removeDuplicates()的编码为:

Util.removeErrorDuplicates = function (selector) {
setTimeout(function() { 
Util.removeDuplicates(selector + " li"); 
}, 10);
}

CCD_ 9的编码为:

Util.removeDuplicates = function (selector) {
"use strict";

var $elements = $(selector);
var $element;
var element;
var html;

var htmlsDone = new Set();
var elementsNum = $elements.length;

for (var i=0; i<elementsNum; i++) {
element = $elements[i];
html = element.outerHTML;

if (htmlsDone.has(html)) {
$element = $elements.eq(i);
$element.remove();
}
else {
htmlsDone.add(html);
}
}
}

如果Util.removeErrorDuplicates()setTimeout中的毫秒数太低并且没有删除重复项,请随意更改:(

相关内容

  • 没有找到相关文章

最新更新