从数据表中选择时,我正在尝试创建用于编辑实体对象的表单。因此,当用户在datatable中单击commandButton时,myBean.person
属性将填充适当的person对象。人具有“身份”属性。
我想根据“status”属性的值验证具有不同验证组的编辑表单。这可能吗?
我创建了两个不同的验证组:
@Entity
public class Person{
private String status;
...
@NotNull(message = "{person.null.name}", groups = PersonNew.class)
private String name;
@NotNull(message = "{person.null.code}", groups = PersonActive.class)
private String code;
}
我想在保存之前验证表单,当状态为“新”时,应设置name
属性。当状态为“活动”时,应设置code
属性。
我有jsf页面:
<h:form id="personEdit">
<h:inputText value="#{myBean.person.name}" />
<h:inputText value="#{myBean.person.code}" />
... other fields for other properties ...
<h:commandButton value="Save" action="#{myBean.save}" />
</h:form>
我尝试将<f:validateBean />
标记用于dynamicaly set validationGroups属性,但是在检索实际person对象之前调用了返回validationGroups的方法。所以我无法根据Person.status
属性决定。
如果人员的状态为“新”,那么可以将PersonNew
定义为验证组,否则将PersonActive
定义为验证组?
感谢您的帮助。
答案 0 :(得分:0)
如果您使用Hibernate Validator而不是@GroupSequenceProvider
看起来应该满足您的需求:
@GroupSequence注释是标准化的Bean验证注释[...],它允许您静态地重新定义类的默认组序列。 Hibernate Validator还提供自定义的非标准化注释 - org.hibernate.validator.group.GroupSequenceProvider - 允许动态重新定义默认组序列。
请参阅official manual。