使用p:autocomplete进行PrimeFaces客户端验证

时间:2016-07-31 20:30:55

标签: validation jsf-2 primefaces

我使用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一起正常使用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我已在GitHub PF showcase检查了您的验证器,它适用于(输入和自动完成)组件。在这两种情况下,JS验证都是在开始时和在调用Java验证器之后触发的。

您没有提供完整的代码,但重要的部分是:

  1. 首先,您必须通过设置context-param <context-param> <param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name> <param-value>true</param-value> </context-param>来启用CSV机制,但如果验证适用于输入,则可能会执行此操作。
  2. 您必须在commandButton / commandLink
  3. 上提供validateClient="true"属性
  4. Java中的验证程序类必须提供正确的validatorId。您可以在PF showcase中找到它(请查看EmailValidator类)public String getValidatorId() { return "custom.emailValidator"; }。 您可以检查浏览器中的html代码是否正确生成了f:validator validatorId(例如,使用Firebug - &gt;应该在data-p-val="custom.emailValidator"中生成。
  5. 检查这3点。如果它不起作用,请提供您的Java验证器。