0

私はICEfaces3.2を使用しています。ace:textAreaEntry特定のフィールドに対して定義されたバリデーターメソッドがあります。バリデーター内の検証コードが失敗した場合、コンテキストにfacesエラーメッセージを追加しています。このエラーメッセージがコンテキストに追加されたときに、myactionListenerが実行されないことを期待していました。しかし、私が気付いたのは、バリデーターからコンテキストにfacesエラーメッセージを追加した後でも、actionListenerが実行されることです。検証に失敗したため、facesは実行されないと思いましたactionlistener

XHTML textareaentryコード:

<ace:textAreaEntry
  id="addrincountryofincorp"
  value="#{strformbean.addrInCountryOfIncorp}"
  required="true" styleClass="#{facesContext.validationFailed?'ui-state-error':''}"
  label="Address in Country of Incorporation" cols="50" rows="5"
  validator="#{strformbean.validateAddrLen}" />

バリデーターメソッド:

public void validateAddrLen(FacesContext fc,UIComponent uc, Object obj){
  int len = 0;
  Map compAttr = uc.getAttributes();
  log.debug("inside validateAddrLen...");
  log.debug("obj = "+obj);
  if(obj !=  null && ! obj.equals("")){
    len = obj.toString().length();
    if(len > 200){
      Utility.addValMesgToContext(compAttr.get("label").toString() + " cannot exceed 200 Characters");
      return;
    }
  }
}
4

1 に答える 1

1

実際に投げた場合にのみ、検証は失敗したと見なされますjavax.faces.validator.ValidatorException

内部のFacesMessageで例外をスローしてみてください:

FacesMessage msg = new FacesMessage("my validaton message");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
于 2013-01-20T08:09:57.157 に答える