似乎JSF 2.0没有调用“类级别约束”。引用SO answer
JSF 2.0不调用类级验证约束。从JSF validation: JSF 2提供了与JSR-303约束的内置集成。在应用程序中使用bean验证时,JSF会自动使用UIInput值引用的bean约束。
答案还建议使用SeamFaces来验证类级约束。
不幸的是,这是一个非选项,因为它引入了一个相当大的依赖性,只是为了验证应该验证的内容。
我的问题是:
控制器中的手动验证是繁琐的,并且有很多重复的代码,因此我想避免使用它。
我试图通过注释要使用@Valid
进行验证的Controller-Field来做到这一点,但没有帮助。
我猜测应该可以让“过程验证”阶段为我做这件事,或者在“更新模型值”阶段之后挂钩类似于Filter
的东西,这将通过验证集中运行模型值。
答案 0 :(得分:7)
在即将推出的JSF 2.3之前,JSF并不支持使用a.o进行类级别验证。 @Valid
。鉴于very first JSF spec issue ever解决了这一问题,这是一个永恒的问题。
您的度假村要么使用已经处理过的第三方图书馆,要么根据相关开源图书馆的来源进行自酿(将许可考虑在内)。
除了您已找到的SeamFaces <s:validateForm>
之外,还有OmniFaces <o:validateBean>
。与<s:validateForm>
相比的主要区别在于它不使用JSF Validator
,而是使用JSR303 ConstraintValidator
(并且您可以立即将整个实体用于需要声明并注释一堆字段,重复实体的属性。
JSF 2.3支持将具有<f:validateWholeBean>
的风格,主要基于OmniFaces <o:validateBean>
。