2012-10-22 43 views
4

我有一個3字段的表單,並提交按鈕。當點擊按鈕時,如果沒有在3個字段中輸入,則輸出驗證消息。如果輸入3個字段中的任何一個,則處理數據並使用數據表將結果顯示回同一頁面中。我能夠爲一個字段提供驗證消息,但不能爲兩個字段或更多。這裏是我的代碼。同樣,如果我有一個長期的價值,我需要通過,並驗證我該怎麼做,因爲長期價值不能被驗證爲isEmpty()isNull()如何驗證是否輸入了多個輸入字段中的至少一個?

這是我的代碼,我想用它與多個字段和具有長值的字段進行驗證。

<h:inputText id="userName" value="#{user.userName}" required="true" 
    requiredMessage="Please enter username" /> 

<h:inputText id="empId" value="#{user.empId}" required="true" 
    requiredMessage="Please enter Employee Id" /> 

<h:inputText id="acctNm" value="#{user.acctNm}" required="true" 
    requiredMessage="Please enter Employee Id" /> 
+0

你的問題是什麼?爲什麼不能只改變'search()'方法來檢查所有字段?使用「長」檢查空值。 –

+0

儘管我將其更改爲null,但在前端中它顯示值爲0的文本框內的值爲long。我可以擺脫填充0嗎?是的,我可以更改搜索方法來檢查所有字段,但是如何獲取它們?如果我使用無效方法的面上下文,UIComponent,對象值不起作用。 – user1765427

+0

將'empId'和'acctNm'添加到您的'用戶'bean中。製造這兩個'java.lang.Long'。 –

回答

6

只要讓每個字段的required屬性檢查其他字段的提交值的存在。提交的值在參數映射#{param}中由客戶端ID作爲密鑰提供。

這裏有一個開球例如:

<h:form id="form"> 
    <h:inputText id="field1" ... required="#{empty param['form:field2'] and empty param['form:field3']}" /> 
    <h:inputText id="field2" ... required="#{empty param['form:field1'] and empty param['form:field3']}" /> 
    <h:inputText id="field3" ... required="#{empty param['form:field1'] and empty param['form:field2']}" /> 
</h:form> 

它只有更醜的領域的數量增長。

或者,你可以使用OmniFaces<o:validateOneOrMore>

<h:form id="form"> 
    <h:inputText id="field1" ... /> 
    <h:inputText id="field2" ... /> 
    <h:inputText id="field3" ... /> 

    <o:validateOneOrMore id="oneOrMore" components="field1 field2 field3" /> 
    <h:message for="oneOrMore" /> 
</h:form> 

請注意,行動方法進行驗證是糟糕的設計。您應該爲此使用標準的JSF驗證設施,例如requieredvalidator<f:validator>和/或<f:validateXxx>

+0

實際上,我應該使用icefaces1.8,但由於我的機器上未安裝icefaces,因此我使用jsf標籤來完成。無論如何..我們說如果驗證通過,意味着用戶在三個字段之一中輸入了某個值,那麼我需要在同一頁面上獲取數據到數據表。我可以使用動作或動作偵聽器嗎?我如何處理這些?在驗證方法裏面? – user1765427

+0

只是在命令按鈕綁定的操作方法中的常用方式。驗證失敗時,操作方法不會被調用。至於ICEfaces的限制;請注意,OmniFaces不是一個組件庫,它是一個實用程序庫。您可以將它與每個JSF組件庫一起使用。 – BalusC

+0

感謝它工作正常,唯一的事情是我可以得到一個錯誤消息,而不是3?就像請在其中一個字段中輸入至少一個值。現在我收到如下所示的錯誤消息:form:userName:驗證錯誤:值是必需的.form:empId:驗證錯誤:值是必需的,窗體:acctNm:驗證錯誤:需要值 – user1765427

0

至少對於iceFaces來說,跨多個字段驗證的另一種方法,特別是當驗證比「required」更復雜時,就是在支持bean中使用應用程序級驗證。

@see Custom Validator in Backing Beans

  • 添加驗證屬性,你rcomponent並將其指向德驗證方法在支撐bean
  • 德後臺bean裏面你現在就可以訪問所有的表單域,並做交叉驗證

問候

羅布

+0

這不是ICEfaces特定的。這只是標準的JSF。我建議花更多的時間學習基本的JSF。畢竟,你還沒有詳細回答具體的問題。你只是在暗示它可以用一個自定義的JSF驗證器來完成,但你完全沒有告訴*如何*。 – BalusC

相關問題