Bean验证不适用于ICEFaces中的simpleSelectOneMenu

时间:2014-11-14 09:41:49

标签: jsf-2 icefaces-3

我使用jsf 2.1.21,ICEFaces 3.3,Tomcat 7和hibernate验证器5.1。组件ace:simpleSelectOneMenu是指配置了@Min验证的辅助bean字段。并且不会执行bean验证。

<ace:simpleSelectOneMenu id="category" value="#{myBean.catId}" label="Category"
                         validatorMessage="Please select category">
   <f:selectItem itemValue="-1" itemLabel="Please select"/>
   <f:selectItem itemValue="0" itemLabel="Category 1"/>
   <f:selectItem itemValue="1" itemLabel="Category 2"/>      
</ace:simpleSelectOneMenu>
<h:message id="categoryMsg" for="category"/>

@ManagedBean
public class MyBean {

  @Min(0)
  private int catId;

  public int getCatId() {
     return catId;
  }

  public void setCatId(int catId) {
     this.catId = catId;
  }
}

如果使用h:selectOneMenu而不是ace:simpleSelectOneMenu,则bean验证有效。我发现ace SelectOneMenu组件的验证程序javax.faces.validator.BeanValidator已添加到验证程序中。但它没有被触发。

我想知道如何使验证器工作? 如果使用ace之类的其他ace:textEntry组件,则bean验证可以正常工作。

1 个答案:

答案 0 :(得分:0)

可能的解决方案可以使用valueChangeListener的{​​{1}}。

ace:simpleSelectOneMenu中调用它。对于组件,由jsf创建验证器validate phase。因此javax.faces.validator.BeanValidator可以通过组件的所有验证器并触发valueChangeListener类型的验证器。捕获BeanValidator并调用ValidatorException会模拟验证失败,并且不会调用FacesContext.validationFailed()

update model phase