2009-10-27 164 views

回答

0

JSF2會讓你做一個表單級的驗證。現在,你將不得不湊合着用兩種:形式 提交後

  • 驗證在一個Bean和填充 的FacesMessage給用戶,如果它失敗。
  • 將驗證程序添加到一個字段,並在 驗證程序加載其他 字段並檢查其值。
1

只要讓required屬性取決於其請求參數映射中其他輸入字段的存在結果。

<h:form id="form"> 
    <h:inputText id="input1" value="#{bean.input1}" required="#{empty param['form:input2'] and empty param['form:input3']}" /> 
    <h:inputText id="input2" value="#{bean.input2}" required="#{empty param['form:input1'] and empty param['form:input3']}" /> 
    <h:inputText id="input3" value="#{bean.input3}" required="#{empty param['form:input1'] and empty param['form:input2']}" /> 
</h:form> 

另外,您還可以利用組件的結合,並使用UIInput#getValue()檢查以前的組件的價值和UIInput#getSubmittedValue()檢查它們爲尚未對被驗證的組件(組件的順序處理它們出現在組件樹中)。這樣你就不需要對客戶端ID進行硬編碼。您只需確保綁定名稱與現有的託管bean名稱不衝突。

<h:form> 
    <h:inputText binding="#{input1}" required="#{empty input2.submittedValue and empty input3.submittedValue}" /> 
    <h:inputText binding="#{input2}" required="#{empty input1.value and empty input3.submittedValue}" /> 
    <h:inputText binding="#{input3}" required="#{empty input1.value and empty input2.value}" /> 
</h:form> 
0

如果您不想使用必需的屬性或JavaScript,那麼有兩種方法。

其中之一是創建一個驗證器,但在我看來,這太過分了。

我只會檢查輸入在bean中是空還是空。

if ("".equals(theFieldYouWantToCheck) || theFieldYouWantToCheck == null) { 
//Either throw exception or return "false" so that you can handle it 
} 
0

如果您使用RichFaces的,那麼你可以按照如下步驟進行驗證(見http://mkblog.exadel.com/ria/richfaces-ria/richfaces-built-in-client-functions/):

<h:form id="form"> 
    <h:inputText id="input1" value="#{bean.input1}" /> 
    <h:inputText id="input2" value="#{bean.input2}" 
     required="#{empty rich:findComponent('input1').submittedValue}" 
     requiredMessage="At least one of the fields input1 and input2 must be filled."/> 
</h:form> 

注意,表達豐富:findComponent( '輸入1')等同爲UIComponent [」輸入1' ]。原因是Seam提供了動態映射uiComponent來查找UI組件。

相關問題