1

私は JSF を学んでおり、JSF 検証を理解する上で助けが必要です。「 http://courses.coreservlets.com/ 」の助けを借りて、同じページで手動、暗黙的、明示的な検証を行おうとしています。以下のように、バリデーションを使用して2つの入力フィールドを作成しました。

Customer Name: <h:inputText value="#{bean.customerName}" required="true" />         
       Account No: <h:inputText value ="#{bean.accountNo}" > 
        <f:validateLength minimum="10"></f:validateLength>
       </h:inputText>          
       <h:commandButton value="Submit" action="#{bean.actionValidate}"></h:commandButton>          
       <h:messages globalOnly="true"></h:messages>

public String actionValidate(){     
    FacesMessage fcMessage = new FacesMessage();
    if(getAccountNo().isEmpty() || getAccountNo() == null) {
        fcMessage.setSummary("account no empty");
        fcContext.addMessage(null, fcMessage);
    }       
    if (fcContext.getMessageList().size()>0)
        return null;
    else
        return "ManualValidationResult";
}

私の理解では、filed 1 の必須属性であり、f:validateLength 検証は Process & Validation フェーズで実行され、検証が失敗した場合、ライフ サイクルは Render response フェーズに進み、最初にエラー メッセージが表示されます。これが渡されたら、Bean の検証を実行する必要があります。理想的には、私の例では、Bean の検証は決して実行されません。しかし、「顧客名 - 検証エラー: 値が必要です」というメッセージが表示されます。両方のフィールドが空白のままの場合。

名前フィールドに入力すると、「アカウントが空ではありません」というメッセージが表示され、アカウント番号フィールドに値が入力された場合、後で「検証エラー: 長さが許容最小値の '5' 未満です」というメッセージが表示されます。

流れを理解できる方教えてください。

4

2 に答える 2

0

f:validatelength は、何らかの値がフィールドに関連付けられている場合にのみ機能します。入力フィールドが null の場合、LengthValidator は検証を行いません。LengthValidator からのコードの一部...

// VALIDATE
 public void More ...validate(FacesContext facesContext,
                      UIComponent uiComponent,
                      Object value)
         throws ValidatorException
 {
     if (facesContext == null) throw new NullPointerException("facesContext");
     if (uiComponent == null) throw new NullPointerException("uiComponent");

     if (value == null)
     {
         return;
     }
// length validation code here...
}
于 2013-11-09T04:41:44.350 に答える