使用JSF中的自定义@RequiredWhen验证器和必需的字段装饰器进行Bean验证

时间:2015-07-01 12:12:28

标签: jsf jsf-2 primefaces bean-validation

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

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

我正在使用,

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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