我使用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验证可以正常工作。
答案 0 :(得分:0)
可能的解决方案可以使用valueChangeListener
的{{1}}。
在ace:simpleSelectOneMenu
中调用它。对于组件,由jsf创建验证器validate phase
。因此javax.faces.validator.BeanValidator
可以通过组件的所有验证器并触发valueChangeListener
类型的验证器。捕获BeanValidator
并调用ValidatorException
会模拟验证失败,并且不会调用FacesContext.validationFailed()
。
update model phase