8

我正在编写 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}"/>

我正在设置 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 规范 required=true 并没有真正执行任何验证吗?

4

1 回答 1

22

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

于 2013-02-10T11:17:31.087 回答