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

Bean validation using a custom @RequiredWhen validator and required field decorator in JSF

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

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

我正在使用,

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

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

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

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