【问题标题】:PrimeFaces client side validation with p:autocompletePrimeFaces 客户端验证 p:autocomplete
【发布时间】:2016-12-05 21:39:48
【问题描述】:

我正在使用带有 JSF 2.2 (Mojarra) 的 PrimeFaces 6。我想使用 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 一起正常工作。

有什么想法吗?

【问题讨论】:

  • 你有'tagsValidator'客户端验证吗?或者更好的是,创建一个minimal reproducible example
  • 是的,我有 tagValidator(Javascript 验证器)但验证不起作用

标签: validation jsf-2 primefaces


【解决方案1】:

我在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 上提供 validateClient="true" 属性
  3. Java 中的验证器类必须提供正确的验证器 ID。您可以在 PF showcase 中找到它(查看 EmailValidator 类)public String getValidatorId() { return "custom.emailValidator"; }。 您可以检查f:validator validatorId是否在浏览器的html代码中正确生成(例如使用Firebug->应该在data-p-val="custom.emailValidator"中生成。

检查这 3 点。如果它不起作用,请提供您的 Java 验证器。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多