How can I skip bean validation if all fields for the entity are empty?
我有一个这样的地址实体:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Entity public class Address implements java.io.Serializable { @Id @GeneratedValue(strategy = IDENTITY) private Long id; @Size(max = 100) private String street; @Size(max = 15) private String nr; @Field @Size(min = 1, max = 20) @NotBlank private String city; } |
这是其他几个实体的一部分。对于一个这样的实体,地址是可选的。
我有一个视图,我们的用户可以通过几个表单输入(包括几个地址字段)来编辑整个实体。
为了能够编辑地址,我用一个空的地址实体初始化了父实体。
现在的问题是:当所有地址字段均为空时,我不想在实体上保留
我目前正在做的是完全跳过对提交按钮的
您可以仅在
然后,要在
因此,应该全部这样做:
1 2 3 4 5 6 7 | <c:set var="addressIsEmpty" value="#{empty param[street.clientId] and empty param[nr.clientId] and empty param[city.clientId]}" /> <f:validateBean disabled="#{addressIsEmpty}"> <h:inputText binding="#{street}" value="#{bean.address.street}" /> <h:inputText binding="#{nr}" value="#{bean.address.nr}" /> <h:inputText binding="#{city}" value="#{bean.address.city}" /> </f:validateBean> |
对多个字段进行交叉验证可能是一个棘手的问题。但是在这种情况下,首先困扰您的并不是验证本身,而是在您持久保存实体之前,有可能在bean中的某些条件下使某些实例无效。
最直接的方法是在您的视图中将与
1 2 3 4 5 6 7 8 9 | public String save() { //do some checks if((entity.getAddress().getStreet() == null) && ...) { //assign address to null entity.setAddress(null); } entityService.persist(entity); return"success"; } |