我定义了一个名为@RequiredWhen
的自定义jsr-303-验证器,它与@NotNull
类似,但取决于某些条件。
在JSF中,每当我用@NotNull
注释托管bean属性时,像PrimeFaces <p:outputLabel for="that property">
这样的组件就会根据需要识别该属性并用星号标记它。如果@RequiredWhen
-注释中的条件为true,是否可以实现或配置我的自定义Validator,以便也显示星号?非常感谢。
我在用
- Java EE 6
- GlassFish 3.1.2
- Mojarra 2.1.29
- PrimeFaces 5.2
就我目前所见,答案是否定的:不可能通过配置或实现自定义验证器来显示星号。查看素数面的来源,对@NotNull的检查是硬编码的,并且没有任何回调来检查其他注释。
作为第一个解决方法,我们添加了一个新的bean,用于检查自定义注释的输入字段,例如
<p:inputText id="test" value="#{uiController.data}"
required="#{ContextValidatorDelegate.isRequired('data')}"/>
但经过仔细观察,我们删除了该代表。我们的自定义验证器中的条件取决于用户可以在与验证的属性相同的对话框中修改的属性。所以我们的验证器实际上是一些类级别的验证器。因此,我们不能使用在验证阶段处理的必需属性。我们需要模型bean中的完整用户输入。只有在更新模型阶段之后,类级别的验证才有意义。