我编写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}"/>
页面没有任何时间问题,复选框,按钮一切都可见,我的期望是获得验证消息,当按下按钮之前未选中复选框时。
BTW,它是JSF规范,required = true并没有真正执行任何验证吗?答案 0 :(得分:19)
required=true
表示该字段的值不能为空或为空。这似乎是jsf实现中的错误,但是如果未选中h:selectBooleanCheckbox
,则其值为false
且不为空或null
。所以这不会触发验证。 BalusC has written a nice post about this here。他为此实施了一个验证器,可以帮助您克服这种情况。谢谢BalusC。