在JSF2 web应用程序中使用Bean验证(JSR303)是个好主意吗?



我准备用JavaServer Faces 2创建一个web应用程序。在后端使用其他常用的JEE技术(如EJB3.1和JPA2)进行管理。关键是,我遵循一些领域驱动的体系结构,这意味着,领域模型在JSF层用作支持bean模型,并且通常作为持久层的持久实体进行持久化。在不同的层使用相同的模型可以获得只一次性定义相关模型限制的优势。在这个级别上使用Bean验证为JSF、JPA等提供了该模型的限制。

现在我的问题是,是否使用bean验证与JSF2是一个好主意?我担心的是,将验证限制直接链接到模型可能是错误的方法,因为JSF生命周期的验证通常在某种程度上早于访问模型(对于其验证规则)。据我所知,JSF验证不是在模型处理期间进行的。阶段4:应用模型值),但更早于它自己的专用时间点(阶段3:流程验证),并应用于组件值(提交的值)。但是,如果JSF验证(在阶段3中)在模型处理期间没有进行验证,那么它应该如何知道bean的实际限制呢?

谢谢你的解释。

[编辑]更具体地说,现在我为此目的使用Bean验证,它正在工作,因为无效的值被拒绝,并且正确显示了faces消息。我只是想知道这是否是正确的方法,因为我的理解是验证可能发生在错误的JSF阶段,从而可能导致组件模型不一致。

您可以在数据传输对象(DTO)中添加所有这些bean验证,DTO负责在JSF中交付UI数据。在所有验证都成功之后,您可以将DTO复制到实体(模型)对象。

对于复制(DTO到实体)或(实体到DTO),我们可以使用第三方库,如dozer mapper。

这将避免直接对模型层的验证限制。我指的是实体对象

最新更新