验证JSF中的类级别bean验证约束

时间:2015-01-05 14:05:44

标签: jsf jsf-2 bean-validation hibernate-validator class-level

似乎JSF 2.0没有调用“类级别约束”。引用SO answer

  

JSF 2.0不调用类级验证约束。从JSF validation: JSF 2提供了与JSR-303约束的内置集成。在应用程序中使用bean验证时,JSF会自动使用UIInput值引用的bean约束。

答案还建议使用SeamFaces来验证类级约束。

不幸的是,这是一个非选项,因为它引入了一个相当大的依赖性,只是为了验证应该验证的内容。

我的问题是:

如何让JSF验证类级约束?

控制器中的手动验证是繁琐的,并且有很多重复的代码,因此我想避免使用它。

我试图通过注释要使用@Valid进行验证的Controller-Field来做到这一点,但没有帮助。

猜测应该可以让“过程验证”阶段为我做这件事,或者在“更新模型值”阶段之后挂钩类似于Filter的东西,这将通过验证集中运行模型值。

1 个答案:

答案 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>