2014-11-14 13 views
0

jsf 2.1.21, ICEFaces 3.3, Tomcat 7 및 Hibernate validator 5.1을 사용합니다. 구성 요소 ace:simpleSelectOneMenu@Min 유효성 검사가 구성된 백킹 빈 필드를 나타냅니다. 그리고 빈 검증은 수행되지 않습니다.ICEFaces의 simpleSelectOneMenu에서 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 다음 콩 유효성 검사가 작동하는 경우. 더욱 더 나는 aceSelectOneMenu 구성 요소가 유효성 검사기에 javax.faces.validator.BeanValidator이 추가 된 것을 볼 수 있습니다. 그러나 그것은 유발되지 않습니다.

나는 그 검증 도구를 만드는 방법을 궁금해합니까? 다른 ace 구성 요소를 사용하는 경우 ace:textEntry과 같은 bean 유효성 검사가 작동합니다.

답변

0

가능한 해결 방법은 입니다.

에서 호출됩니다. 그리고 구성 요소에 대해 유효성 검사기 javax.faces.validator.BeanValidator이 jsf로 생성됩니다. 따라서 valueChangeListener은 구성 요소의 모든 유효성 검사기를 통과하고 BeanValidator 유형의 트리거를 트리거 할 수 있습니다. 잡기 ValidatorException을 호출하고 FacesContext.validationFailed()을 호출하면 유효성 검증 오류가 발생하고 update model phase이 호출됩니다.

<ace:simpleSelectOneMenu valueChangeListener="#{myBean.validateBean}"> 

@ManagedBean 
public class MyBean { 
    ... 
    public void validateBean(ValueChangeEvent ve) { 
     UIInput input = (UIInput) ve.getComponent(); 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Validator[] validators = input.getValidators(); 

     for (Validator validator : validators) { 
      if (validator instanceof BeanValidator) { 
       try { 
        validator.validate(context, input, ve.getNewValue()); 
       } 
       catch (ValidatorException e) { 
        input.setValid(false); 
        String txt = input.getValidatorMessage(); 
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, txt, txt); 
        context.addMessage(input.getClientId(), message); 
        context.validationFailed(); 
       } 
      } 
     } 
    }