0

我的页面包含表中值的就地编辑器。像这样的东西:

<h:dataTable var="actor" value="#{bean.actors}">
  <h:column>
   <h:input value="#{actor.name}"/>
  <h:column>
</h:dataTable>

我希望在用户单击保存按钮时验证列表 bean.actors 中的所有演员。所以我在我的bean中添加了以下注释

@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true))
private List<Actor> actors;

在我的演员对象中,我有

@NotNull
private String name;

@AssertTrue
public boolean isValid()

因此 NotNull 注释对所有参与者都进行了验证,但 AssewtTrue 没有进行验证。

4

1 回答 1

0

经过长时间的调试会话后,一切看起来都清晰明了;-)

对于每个绑定(例如 #{bean.property1.property2.actors} )extval 分析 1)基本属性(property2) 2)bean的类

除了搜索 BeanValidation 注释的其他内容,如果找到它们,则执行模型验证。因此,要指定属性参与者应该是有效的,我们需要验证它的直接父级。所以正确的配置应该是这样的:

@BeanValidation(useGroups = Default.class, modelValidation = @ModelValidation(isActive = true,validationTargets={"#{accountController}"}))
public class ActorController{

   @Valid
   public List<Actor> getActors


}

另一个奇怪的事情是,如果我放在字段级别,为什么@Valid 不起作用。但我没有时间检查这个

于 2014-04-23T10:34:17.960 回答