JSF selectBooleanCheckbox required = true不验证是否选中了复选框

Che*_*tan 6 jsf jsf-2 jboss7.x

我写JSF页面,要求用户点击复选框(类似于接受许可协议)我有以下代码:

<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}"/>
Run Code Online (Sandbox Code Playgroud)

我设置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}"/>
Run Code Online (Sandbox Code Playgroud)

页面没有任何时间问题,复选框,按钮一切都可见,我的期望是获得验证消息,当按下按钮之前没有选中复选框.

顺便说一下,JSF规范是否要求= true并不真正执行任何验证?

Moh*_*han 19

required=true对于jsf输入字段意味着该字段的值不能为空或为空.这似乎是jsf实现中的错误,但是当h:selectBooleanCheckbox没有检查时,它的值是,false而不是空或null.所以这不会触发验证.BalusC在这里写了一篇很好的帖子.他为此实施了一个验证器,可以帮助您克服这种情况.谢谢BalusC.

  • 它也在OmniFaces中:http://showcase.omnifaces.org/validators/RequiredCheckboxValidator (3认同)