【发布时间】:2011-08-23 16:32:35
【问题描述】:
当从数据表中选择时,我正在尝试创建用于编辑实体对象的表单。因此,当用户单击数据表中的 commandButton 时,myBean.person 属性将填充适当的人员对象。人具有“状态”属性。
我想根据“状态”属性的值使用不同的验证组来验证编辑表单。这可能吗?
我创建了两个不同的验证组:
@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 /> 标记与动态设置的validationGroups 属性一起使用,但是在检索到实际人员对象之前调用了返回validationGroups 的方法。所以无法根据Person.status属性决定。
如果个人状态为“新”,是否可以将PersonNew 定义为验证组,否则将PersonActive 定义为验证组?
感谢您的帮助。
【问题讨论】:
-
我对这个问题的解决方案是手动验证 bean。在“保存”方法中,我可以决定使用哪个验证组并创建验证器来验证给定的 bean。我可以根据返回的约束违规创建人脸消息或实际保存人。
标签: jsf-2 bean-validation validationgroup