验证器不显示在咆哮或消息中
Validator does not show in growl or messages
我创建了一个自定义验证器,它可以与通常的 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的帮助下,我解决了这个问题。
首先,我按照 BalusC 的建议从“全局”咆哮和“本地”消息中删除了 autoUpdate="true"
。这将对应用程序的其余部分产生影响,但这不是问题:D
问题是,如果我将验证器添加到两个或多个输入,则同一条消息会显示多次。所以,我在提交按钮上添加了
oncomplete="Util.removeErrorDuplicates('#messages');"
其中Util.removeDuplicates()
的代码是:
Util.removeErrorDuplicates = function (selector) {
setTimeout(function() {
Util.removeDuplicates(selector + " li");
}, 10);
}
而Util.removeDuplicates()
的代码是:
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
中的毫秒数太低且未删除重复项,请随意更改毫秒数:)
我创建了一个自定义验证器,它可以与通常的 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的帮助下,我解决了这个问题。
首先,我按照 BalusC 的建议从“全局”咆哮和“本地”消息中删除了 autoUpdate="true"
。这将对应用程序的其余部分产生影响,但这不是问题:D
问题是,如果我将验证器添加到两个或多个输入,则同一条消息会显示多次。所以,我在提交按钮上添加了
oncomplete="Util.removeErrorDuplicates('#messages');"
其中Util.removeDuplicates()
的代码是:
Util.removeErrorDuplicates = function (selector) {
setTimeout(function() {
Util.removeDuplicates(selector + " li");
}, 10);
}
而Util.removeDuplicates()
的代码是:
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
中的毫秒数太低且未删除重复项,请随意更改毫秒数:)