2013-10-31 19 views
2

我問了我的問題here但我認爲它缺少一些明顯的信息。因此我再次發佈我的問題。跳過驗證並調用應用程序

我有一個JSF表單,其中有一些需要驗證的h:inputText字段。提交表單時,我想跳過(或忽略)所需的驗證檢查並仍然調用應用程序。我確實希望進行表單數據驗證並根據某些條件顯示錯誤。

基本上我想跳過驗證並在使用ajax調用提交表單時調用應用程序,並在通過單擊提交按鈕提交表單時進行驗證。

回答

8

只要把條件直接在required屬性中。

<h:inputText ... required="#{someCondition}" /> 

它只是接受像許多其他屬性的任何EL表達式。許多初學者認爲你只能對其中的"true""false"字符串進行硬編碼。這是不真實的。

例如,當你要讓它評估true只有當保存按鈕實際上是按下:

<h:inputText ... required="#{not empty param[save.clientId]}" /> 
... 
<h:commandButton value="Cancel" ... /> 
<h:commandButton binding="#{save}" value="Save" ... /> 

(注:代碼完成原來的樣子,你需要綁定它Bean屬性)

這樣的required屬性只計算當保存按鈕被按下true和用於其他任何按鈕或AJAX事件監聽評估false

+0

這實際上聽起來像一個絕妙的主意。然而,它在我的應用程序中沒有按預期工作。基本上所需的驗證不會被觸發。如果在進行驗證時服務器端的條件評估爲true,是否有方法進行調試?我所做的是將需要的映射到一個支持bean屬性,即required =「#{validate.validateRequired}」,然後隱藏表單字段映射到該屬性,當點擊按鈕提交表單時該屬性將打開。我的表格以不尋常的方式設計,因此我需要這樣做。 –

+0

它應該工作。也許你在使用JSF 1.x時沒有在問題中明確提到它?在JSF 1.x中,'UIComponent'類沒有無參數的'getClientId()'方法,因此'#{save.clientId}'會失敗。幾乎4年前發佈了JSF 2.x,沒人會期望這些日子裏仍然可以使用JSF 1.x。如果您使用的庫比以前版本舊,那麼您應該**總是**在問題中明確提及它。對於JSF 1.x還有一種方法,但您必須自己硬編碼組件的客戶端ID。 – BalusC

+0

我使用JSF2.x順便說一句。對不起,我必須編輯我的評論,而你回答它。 –

相關問題