2012-08-30 43 views
2

我目前正在向表單添加驗證。有兩件事情來檢查:本身的價值(例如,如果它是一個正整數或有效的電子郵件)和所有必填字段是否填寫的正確性如何立即驗證值,但僅在完整提交時檢查是否需要?

然而,如果通過某種方式(f:ajax或ICEfaces的partialSubmit屬性)我一次性進行類型正確性的驗證(例如,當字段失去焦點時),它也將在同一步驟中檢查required屬性。在大多數情況下,這是沒有問題的,因爲用戶已經輸入了一個值並且很可能會糾正它而不是回到空白字段。

然而,在他實際上想要再次清除該領域的情況下,他不能再這樣做沒有得到一個錯誤。因此,我只想在最終提交頁面時檢查字段的必填項。

此刻,我分出兩個驗證類型唯一的想法是由豆子後盾的操作方法執行所有必需的檢查,從而嘗試將其直接向最終通過按鈕提交。

還有別的辦法嗎? (爲了背景:人們可能想要再次清除該字段的原因是需求可以根據表單中的其他選擇而改變,所以人們可能決定不提供該字段,並且只有在更正該選項之後這實際上使得這個字段是可選的)。

回答

2

當提交按鈕確實被按下時,讓required屬性評估true。然而

問題的答案取決於你如何提交按鈕的方式執行它的邏輯(標準,f:ajax,ICEfaces的,等等)。但基本上可以歸結爲,您可以檢查請求參數映射中的請求參數,該參數表明所需的提交按鈕已被按下。

例如,如果它是一個標準的命令按鈕:

<h:form id="form"> 
    ... 
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}" /> 
</h:form> 

然後,你可以通過檢查檢查,如果按鈕的客戶端ID出現在請求參數映射:

<c:set var="submitButtonPressed" value="#{not empty param['form:submit']}" /> 
... 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" /> 

或者,如果它是一個<f:ajax>按鈕:

<h:form id="form"> 
    ... 
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}"> 
     <f:ajax execute="@form" ... /> 
    </h:commandButton> 
</h:form> 

然後,你可以通過檢查檢查荷蘭國際集團如果javax.faces.source參數等於按鈕的客戶端ID:

<c:set var="submitButtonPressed" value="#{param['javax.faces.source'] == 'form:submit'}" /> 
... 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" /> 

你甚至可以結合兩種:

<c:set var="submitButtonPressed" value="#{not empty param['form:submit'] or param['javax.faces.source'] == 'form:submit'}" /> 
... 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" /> 
<h:inputText ... required="#{submitButtonPressed}" />