我有一个JSF 2.0应用程序,它也使用Primefaces 3.3 . 目前有一个很好的功能,如果相关的 <p:inputText>
使用 required="true"
属性,标签用星号装饰 .
此字段绑定到bean属性,该属性使用 @NotNull
验证约束进行批注 . 当bean属性已经使用@NotNull注释时,在XHTML中添加 required="true"
似乎是多余的并且容易出错 .
是否有一个钩子或某种方法来自动装饰与@NotNull绑定到属性的组件的标签?
任何想法或建议都非常感谢 .
2 回答
注意:这是一个黑客 . 由于它使用了内省,它可能会对性能产生影响
@PostConstruct
等合理的位置执行此检查 . 声明一个全局变量以确定所需的属性required
属性绑定到辅助bean中的变量此解决方案基于PF 6.0,我不记得以前版本中是否有
BeanValidationMetadataExtractor
. 无论如何,创建一个DIY提取器是一项简单的任务 .我遇到了类似的问题 . 在我的具体情况中:
应通知用户需要某个字段(读取
UIInput
)我不想在comp上重复
required="true"
因为它已经绑定到@NotNull
/@NotBlank
属性/字段在我的情况下,标签组件可能不存在(我不喜欢带星号的标签)
所以,这就是我所做的:
并在faces-config.xml中声明它:
使用此侦听器
UIInput
将使用data-required
passthrough属性进行渲染:现在,我使用css规则来突出显示这些字段:
您可以调整此侦听器,以根据需要设置组件,或使用另一种适合您特定需求的方法 .
另一种方法可能是:
听
UILabel
而不是UIInput
s获取
UIInput
与标签的for
/forValue
ValueExpression相关联检查
UIInput
是否有验证约束最终调用
UIInput.setRequired(true)
性能影响可以忽略不计,因为我测试了大约3000个组件的复杂页面 .