2013-02-10 89 views
6

我寫JSF頁面,要求用戶點擊一個複選框(類似於接受許可協議),我有以下到位代碼:JSF selectBooleanCheckbox必需=真不驗證,如果複選框被選中

<h:selectBooleanCheckbox value="#{checkBoxManagedBean.checkBoxValue}" required="true" id="jsfcheckBox" > 
</h:selectBooleanCheckbox> 
<h:outputLabel value="accept rule label" for="jsfcheckBox" /> 
<h:message for="jsfcheckBox"/> 
<br/> 
<h:commandButton id="loginButton" value="Submit" 
    action="#{checkBoxManagedBean.testAction}"/> 

我正在設置required = true,但沒有對複選框進行驗證。我沒有看到任何消息顯示在複選框的頁面中。

我已經試過f:validateRequired,即使這是行不通的。

<h:selectBooleanCheckbox value="#{checkBoxManagedBean.checkBoxValue}" required="true" id="jsfcheckBox" > 
     <f:validateRequired for="jsfcheckBox"></f:validateRequired> 
     </h:selectBooleanCheckbox> 
     <h:outputLabel value="CheckBox label" for="jsfcheckBox" /> 
     <h:message for="jsfcheckBox"/> 
     <br/> 
     <h:commandButton id="loginButton" value="Submit" 
        action="#{checkBoxManagedBean.testAction}"/> 

頁可是沒有任何時間問題,複選框,按鈕都可見,我的期望是得到一個驗證消息,當按下按鈕之前未選中複選框。

順便說一句,它是JSF規範,所需=真並不真正執行任何驗證?

+0

required = true驗證值是否不爲空,'true'和'false'都不是空值,所以驗證通過。如果你想複選框被選中,那麼應該使用另一種類型的驗證器。 – Osw 2013-02-10 11:24:32

回答

17

required=true對於jsf輸入字段意味着該字段的值不能爲空或爲空。這似乎是在jsf實現中的錯誤,但是當h:selectBooleanCheckbox未被選中時,它的值是false而不是空的或null。所以這不會觸發驗證。 BalusC has written a nice post about this here。他爲此實施了一個驗證器,幫助您克服這種情況。謝謝BalusC

+3

它也在OmniFaces中:http://showcase.omnifaces.org/validators/RequiredCheckboxValidator – BalusC 2013-02-11 12:22:10