【问题标题】:Add a default validator to my custom UIComponent将默认验证器添加到我的自定义 UIComponent
【发布时间】:2013-06-21 17:53:21
【问题描述】:

我正在开发一个自定义 JSF UIInput,它期望用户提供一个特制的值。为了验证用户输入,我需要运行一系列仅与手头的应用程序相关的检查。这不仅仅是一个普通的电子邮件或电话号码输入字段。它是一个文本输入,有一个复合值,需要将其解构为多个部分,并且每个部分都需要进行验证。

我设法自己创建了组件。

@FacesComponent("MyComponent")
public class MyComponent extends UIInput {
   public String getFamily() {...}

   encodeBegin() {...}
   encodeEnd() {...}

}

mycomponent.taglib.xml 绑定在META-INF 中,我可以成功使用和测试组件。

我还实现了一个验证器类,它可以完成所有工作。准备好了。

public class AutomationDetectionValidator implements Validator {
   public void validate(...) throws ValidatorException {...}
}

但是,我需要在该组件中包含一个自定义验证器作为默认值。我可以按如下方式手动执行此操作:

<custom:myComponent>
    <f:validator validatorId=”myComponentValidator”/>
</custom:myComponent>

但预期的用法是

<custom:myComponent/>

验证器应该会自动出现。

我现在整天都在谷歌上搜索,但我能找到一些我们不想要的用法的基本示例。

【问题讨论】:

    标签: jsf jsf-2 validation custom-component


    【解决方案1】:

    只需将其添加到组件的构造函数中即可。

    public MyComponent() {
        addValidator(new AutomationDetectionValidator());
    }
    

    【讨论】:

    • 附带说明一下,我在这里本地更新了我的代码,但我错过了一个简单的事实,即 addValidator() 方法是直接从 UIInput 继承的。如果您从 UIComponent 扩展,您将看不到此方法。感谢您的帮助!
    • 不客气。它确实在UIInput 中定义,您已经在您的问题中找到了。
    猜你喜欢
    • 2014-12-03
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2019-03-24
    • 1970-01-01
    • 2017-12-31
    • 2012-09-29
    相关资源
    最近更新 更多