我使用PrimeFaces 6和JSF 2.2(Mojarra)。我想使用PrimeFaces的客户端验证(CSV),但使用p:autocomplete
它不起作用。
<p:autoComplete multiple="true" value="#{portfolio.tags}" minQueryLength="3"
forceSelection="true" id="tags" maxResults="5"
required="true"
requiredMessage="#{msg['portfolio.tags.number']}"
completeMethod="#{sessionController.tagAutoComplete}">
<f:validator validatorId="tagValidator"/>
</p:autoComplete>
验证员下方:
PrimeFaces.validator['tagValidator'] = {
validate : function(element, value) {
alert("ok");
if (value == null || value.length < 5) {
throw {
summary : 'Validation Error',
detail : 'Validation error'
}
}
}
}
我注意到它从不调用tagValidator
java类实例而不是PrimeFaces.validator['tagValidator']
javascript实现。 CSV可与p:inputText
一起正常使用。
有什么想法吗?
答案 0 :(得分:0)
我已在GitHub PF showcase检查了您的验证器,它适用于(输入和自动完成)组件。在这两种情况下,JS验证都是在开始时和在调用Java验证器之后触发的。
您没有提供完整的代码,但重要的部分是:
<context-param>
<param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name>
<param-value>true</param-value>
</context-param>
来启用CSV机制,但如果验证适用于输入,则可能会执行此操作。validateClient="true"
属性
public String getValidatorId() {
return "custom.emailValidator";
}
。
您可以检查浏览器中的html代码是否正确生成了f:validator validatorId
(例如,使用Firebug - &gt;应该在data-p-val="custom.emailValidator"
中生成。检查这3点。如果它不起作用,请提供您的Java验证器。