Jsf 2 当命令按钮在数据表外部但在表单内部单击时,如何在数据表内部使复选框required为true?

Jsf 2 当命令按钮在数据表外部但在表单内部单击时,如何在数据表内部使复选框required为true?,jsf-2,checkbox,jboss7.x,Jsf 2,Checkbox,Jboss7.x,我有多个表单,每个表单至少有一个基于不同条件呈现的命令按钮。我在表单中有一个datatable,其中一列是。在datatable之外,我放置了一个命令按钮,这样用户可以通过选中复选框选择一行并提交表单。我能够成功地完成这项任务 但是,当只单击此特定表单中的commandbutton时,我必须使成为必需。但是当我按照下面的方法做的时候,它根本不起作用。当用户没有选择datatable中的任何复选框并提交表单时,如何使复选框成为必需的 < h:form prependId="false

我有多个表单,每个表单至少有一个基于不同条件呈现的命令按钮。我在表单中有一个datatable,其中一列是
。在datatable之外,我放置了一个命令按钮,这样用户可以通过选中复选框选择一行并提交表单。我能够成功地完成这项任务

但是,当只单击此特定表单中的commandbutton时,我必须使
成为必需。但是当我按照下面的方法做的时候,它根本不起作用。当用户没有选择datatable中的任何复选框并提交表单时,如何使复选框成为必需的

    < h:form prependId="false" rendered="#{bean.somecondition}">

                    <h:dataTable id="userdata" value="#{bean.list}" var="obj">

                         <h:column>
                                <h:selectBooleanCheckbox required="#{not empty param[commandbutton.clientId]}"
                                                                    requiredMessage="Please select atleast one check box to proceed."
                                                                    value="#{bean.checked[obj.Id]}" />
                       </h:column>

                    </h:dataTable>

                  <h:commandButton value="submit" binding="#{commandbutton}"
                        action="#{bean.someaction}">
                </h:commandButton>

    </h:form>
但是我想用JSF来做这件事,
required=“true”
首先在复选框上不起作用。这完全与它是否在数据表中无关,也与
required
属性是用
true
硬编码还是来自EL表达式无关

具体原因是选中的值为从不
null
。未选中时,它只是
false
,而不是
null
或空字符串。因此,即使未选中,
required=“true”
验证始终通过

JSF实用程序库已经发现了这个问题,并为此提供了一个解决方案

在您的特定情况下,您可以按如下方式使用它:

<h:selectBooleanCheckbox 
    requiredMessage="Please select at least one check box to proceed."
    value="#{bean.checked[obj.Id]}">
    <f:validator 
        validatorId="omnifaces.RequiredCheckboxValidator" 
        disabled="#{empty param[commandbutton.clientId]}" />
</h:selectBooleanCheckbox>

@BalusC。。。。。。。。。谢谢你的解释。我完全错过了部分
当我考虑它时,检查值从不为空。无论如何,我们已经在应用程序中使用了
omnifaces
。我将在我们的应用程序中实现此代码。
<h:selectBooleanCheckbox 
    requiredMessage="Please select at least one check box to proceed."
    value="#{bean.checked[obj.Id]}">
    <f:validator 
        validatorId="omnifaces.RequiredCheckboxValidator" 
        disabled="#{empty param[commandbutton.clientId]}" />
</h:selectBooleanCheckbox>