我的页面包含表中值的就地编辑器。类似这样的东西:
<h:dataTable var="actor" value="#{bean.actors}">
<h:column>
<h:input value="#{actor.name}"/>
<h:column>
</h:dataTable>
我希望列表中的所有参与者。当用户点击保存按钮时,参与者都会被验证。所以我把下面的注释放在我的bean 中
@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true))
private List<Actor> actors;
在我的演员对象中,我有
@NotNull
private String name;
@AssertTrue
public boolean isValid()
因此,NotNull注释对所有参与者都进行了验证,但AssetTrue不会进行验证。
经过长时间的调试后,一切看起来都清晰明了;-)
对于每个绑定(例如#{bean.property1.property2.actors}),extval分析1) 基本属性(属性2)2) 豆类
除其他内容外,它还搜索BeanValidation注释,如果找到它们,则执行模型验证。因此,为了指定属性参与者应该是有效的,我们需要验证它的直接父级
@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true,validationTargets={"#{accountController}"}))
public class ActorController{
@Valid
public List<Actor> getActors
}
另一件奇怪的事情是,如果我把@Valid放在场上,为什么它不起作用。但我没有时间检查这个