【发布时间】:2015-04-20 12:10:28
【问题描述】:
我想知道是否有一种方法,如果有,正确的方法是什么,在 EJB bean 和 Web 服务中为 JSF 使用相同的验证逻辑(一个实现) - 休息(高枕无忧)。
目前所有层都使用 Hibernate 实体,因为我觉得我的项目太小,无法在表示层上使用额外的 DTO 使其复杂化,但其余服务将使用 DTO。
我该如何解决这个问题?
谢谢!
【问题讨论】:
标签: validation jsf jakarta-ee jpa jax-rs
我想知道是否有一种方法,如果有,正确的方法是什么,在 EJB bean 和 Web 服务中为 JSF 使用相同的验证逻辑(一个实现) - 休息(高枕无忧)。
目前所有层都使用 Hibernate 实体,因为我觉得我的项目太小,无法在表示层上使用额外的 DTO 使其复杂化,但其余服务将使用 DTO。
我该如何解决这个问题?
谢谢!
【问题讨论】:
标签: validation jsf jakarta-ee jpa jax-rs
Java EE 正是为此目的提供了 JSR303 Bean Validation API。您可能已经在@NotNull 和朋友身边见过他们。默认情况下,JSF 和 JPA 都会自动识别和支持这一点。 JAX-RS 通常没有应该接受/验证输入的“视图”,因此这里不相关。
所以,而不是例如JSF
<h:inputText value="#{bean.entity.property}" required="true" />
单独
private String property;
你可以使用
<h:inputText value="#{bean.entity.property}" />
与
@NotNull
private String property;
如果您通过 JAX-RS 放置数据,JPA 也可以使用它。
在 JSF 方面你需要考虑的唯一一件事是它默认将空字段设置为空字符串而不是 null。您使用以下web.xml 上下文参数告诉JSF 将提交的空字符串值解释为null:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
【讨论】: