【问题标题】:Specifying Validator inside JSF 1.2 custom component在 JSF 1.2 自定义组件中指定验证器
【发布时间】:2012-04-26 04:29:27
【问题描述】:

我已经通过自定义验证器定义(实现 javax.faces.validator.Validator 接口并在 faces-config 中定义)。我需要我的自定义组件在我的组件代码( Renderer 类)中调用此验证器。 我想让我的 xhtml 尽可能干净,并且不想通过嵌入在我的 xhtml 中单独调用验证器

<f:validator validatorId='xx' /> 

在我的组件标签中。 就像我如何实现

getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) 

在我的渲染器中处理转换,我可以做一些类似的事情来处理渲染器中的验证吗?

谢谢

【问题讨论】:

    标签: java lifecycle validation custom-component jsf-1.2


    【解决方案1】:

    这是在 UI 组件级别完成的,而不是在渲染器级别。您的自定义输入组件肯定已经扩展UIInput,否则您会遇到许多其他(未来)问题和/或您将浪费时间编写重复代码。如果您的自定义输入组件扩展了UIInput,那么您可以通过继承的UIInput#addValidator() 方法在组件的构造函数中添加Validator

    public MyCustomInputComponent() {
        addValidator(new MyCustomValidator());
    }
    

    已经实现的UIInput#validate() 方法将自动完成所有的转换、验证和消息处理。

    【讨论】:

    • 谢谢。这正是我想要的。只是好奇为什么在 Renderer 中公开了 getConvertedValue() 来处理转换而不是 addValidator 来处理验证?
    • 转换更像是一项渲染工作(发生在编码 HTML 标记和解码 HTTP 参数期间),逻辑上是 Renderer 的责任。验证不会在渲染期间进行,并且更特定于UIInput 系列的输入组件。验证在验证阶段进行。验证不会操纵输入/输出的值。您可以拥有多个验证器,但不能拥有多个转换器。好吧,我认为这个 JSF 设计决策完全有道理。
    • 不要进一步延长问题,我需要动态添加/确定验证器(例如美国与加拿大邮政编码验证器基于先前的 inputText 值(捕获州/省”信息)。我该如何动态调用 addValidator()?
    • 创建另一个验证器,该验证器根据“先前的值”进一步委托给正确的验证器。
    • 您是否建议在第一个验证器的 validate() 方法中检索从 Context 对象输入的“州/省”值并调用相应的邮政编码验证器?
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多