【问题标题】:Bean validation using a custom @RequiredWhen validator and required field decorator in JSF在 JSF 中使用自定义 @RequiredWhen 验证器和必需字段装饰器进行 Bean 验证
【发布时间】:2015-09-18 14:09:15
【问题描述】:

我定义了一个名为 @RequiredWhen 的自定义 jsr-303-Validator,它类似于 @NotNull,但取决于某些条件。

在 JSF 中,每当我使用 @NotNull 像 PrimeFaces <p:outputLabel for="that property"> 这样的组件注释托管 bean 属性时,都会根据需要识别该属性并用星号标记它。如果@RequiredWhen-annotation 中的条件为真,是否可以实现或配置我的自定义验证器以显示星号?非常感谢。

我正在使用,

  • Java EE 6
  • GlassFish 3.1.2
  • Mojarra 2.1.29
  • PrimeFaces 5.2

【问题讨论】:

    标签: jsf jsf-2 primefaces bean-validation


    【解决方案1】:

    据我目前所见,答案是否定的:不可能通过配置或实现自定义验证器来显示星号。查看 primefaces 的来源,@NotNull 的检查是硬编码的,没有任何回调来检查其他注释。

    作为第一个解决方法,我们添加了一个新 bean 来检查我们的自定义注释的输入字段,例如

    <p:inputText id="test" value="#{uiController.data}" 
             required="#{ContextValidatorDelegate.isRequired('data')}"/>
    

    但仔细观察后,我们删除了该委托。我们自定义验证器中的条件取决于用户可以在同一个对话框中修改的属性,而不是已验证的属性。所以我们的验证器确实是一些类级别的验证器。因此我们不能使用在验证阶段处理的 required-attribute。我们需要模型 bean 中的完整用户输入。只有在更新模型阶段之后,类级别的验证才有意义。

    【讨论】:

    • 为什么不创建 PrimeFaces 类的增强版本?一个只检查您的注释的。它是 java,您可以轻松覆盖它
    • 好吧,我们的客户购买了 primefaces pro,支持的版本。因此,更改“in”primefaces 是不行的。所以我们一直在寻找某种“外部”primefaces 来实现我们的要求。另一方面,一旦了解我们实际上是在使用类级别的验证器,用户在其对话中更改验证结果的条件,我们就认为 asterix 具有误导性。我们放弃了该功能。
    猜你喜欢
    • 2016-10-02
    • 2016-02-10
    • 1970-01-01
    • 2019-03-07
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多