Jsf 无法使用选择在primefaces数据表中选择复选框

Jsf 无法使用选择在primefaces数据表中选择复选框,jsf,checkbox,primefaces,datatable,Jsf,Checkbox,Primefaces,Datatable,我在primefaces中有一个dataTable,希望选择多行,但当我将鼠标悬停在该复选框上时,该复选框不会突出显示,并且在单击时无法选中 该复选框肯定已启用。代码如下: <p:dataTable id="deferDatatable2" value="#{deferMaintenanceTasksBean.tasksList}" var="tasks" rowKey="tasks.jobId"

我在primefaces中有一个dataTable,希望选择多行,但当我将鼠标悬停在该复选框上时,该复选框不会突出显示,并且在单击时无法选中

该复选框肯定已启用。代码如下:

<p:dataTable id="deferDatatable2" 
            value="#{deferMaintenanceTasksBean.tasksList}"
            var="tasks"
            rowKey="tasks.jobId"
            selection="#{deferMaintenanceTasksBean.maintenanceTaskDatas}"                               
            styleClass="editable-datatable" >
            <p:ajax event="toggleSelect"
                listener="#{deferMaintenanceTasksBean.toggleSelect()}" />
            <p:ajax event="rowSelectCheckbox"
                update="deferDatatable2" />
            <p:ajax event="rowUnselectCheckbox"
                update="deferDatatable2" />
            <p:ajax event="rowSelect"
                update="deferDatatable2" />
            <p:ajax event="rowUnselect"
                update="deferDatatable2" />

             <p:column styleClass="select-column" 
                rendered="#{tasks.task.deferrable == 'true'}"                                   
                selectionMode="multiple" >  

            </p:column> 
            <p:column headerText="Task Code"
                 rendered="#{tasks.task.deferrable == 'true'}">
                <h:outputText value="#{tasks.task.taskCode}" />
            </p:column>
            <p:column headerText="Job Code"
                 rendered="#{tasks.task.deferrable == 'true'}">
                <h:outputText value="#{tasks.jobCode.code}" />
            </p:column>
            <p:column headerText="Description"
                 rendered="#{tasks.task.deferrable == 'true'}">
                <h:outputText value="#{tasks.task.description}" />
            </p:column>
            <p:column headerText="Safety Critical"
                 rendered="#{tasks.task.deferrable == 'true'}">
                <p:selectBooleanCheckbox value="#{tasks.task.safetyCritical}"
                    disabled="true" />
            </p:column>
            <p:column headerText="Deferrable?"
                 rendered="#{tasks.task.deferrable == 'true'}">
                <p:selectBooleanCheckbox value="#{tasks.task.deferrable}"
                    disabled="true" />
            </p:column>
            <p:column headerText="Att."
                 rendered="#{tasks.task.deferrable == 'true'}">
                <h:outputText id="i4AttachmentOutLbl"
                    value="#{tasks.task.attachmentCount}" />
            </p:column>
        </p:dataTable>
在toggleSelect方法中只有一个日志,这样我就可以看到该方法是否正在被调用,即使没有选中复选框,但它没有被调用

正如我所说,复选框的渲染方式与其他方式相同,它们不会像禁用一样褪色,但它们的行为方式却像禁用一样。我试图删除样式类,看看它们是否以某种方式影响了事情,但事实并非如此

在我的项目中,我有其他这样的工作示例,从我所看到的,我已经将这个数据表设置为完全相同的,但由于某些原因,它不工作。xhtml具有与其他页面相同的ui:compposition、相同的OutputStylesheet和OutputScript,以及相同的基本布局,因此我确信我从dataTable中遗漏了一些东西,但不知道遗漏了什么

我添加了一个小测试表,如下所示,其中包含一个名为testList的字符串列表,这很有效。不知道为什么会这样

<p:dataTable id="testTable"
            value="#{deferMaintenanceTasksBean.testList}"
            var="test"
            rowKey="test"
            selection="#{deferMaintenanceTasksBean.testListSelect}">
            <p:ajax event="toggleSelect"
                listener="#{deferMaintenanceTasksBean.toggleSelect(1)}" />
            <p:ajax event="rowSelectCheckbox"
                update="testTable" />
            <p:ajax event="rowUnselectCheckbox"
                update="testTable" />
            <p:ajax event="rowSelect"
                update="testTable" />
            <p:ajax event="rowUnselect"
                update="testTable" />

            <p:column selectionMode="multiple" />

            <p:column>
                <h:outputText value="#{test}" />
            </p:column>

        </p:dataTable>
如有任何建议,我们将不胜感激



谢谢

删除列中呈现的标记后,您可以选择复选框。我认为这是因为它删除了表的顶部和“全部切换”复选框,导致其余部分以静默方式失败

删除列中呈现的标记后,应允许您选择复选框。我认为这是因为它删除了表的顶部和“全部切换”复选框,导致其余部分以静默方式失败

删除列中呈现的标记后,应允许您选择复选框。我认为这是因为它删除了表的顶部和“全部切换”复选框,导致其余部分以静默方式失败

删除列中呈现的标记后,应允许您选择复选框。我猜想这是因为它删除了表的顶部和“全部切换”复选框,导致其余部分以静默方式失败

我刚刚在行键周围添加了{},因为它丢失了,但没有任何区别。您的数据表是否嵌套在h:form中?是的,在表单中。我也尝试过将其放入面板和输出面板中,使其无效。为什么要有条件地呈现selectionMode=multiple的列?我已经有过两次类似的问题,这里不是这样的,但我为复选框不起作用的其他人编写了这篇文章。另外,请确保在和中没有selectionMode=multiple,否则它会中断。我刚刚在行键周围添加了{},因为它丢失了,但没有区别。您的数据表嵌套在h:窗体中吗?是的,在窗体中。我也尝试过将其放入面板和输出面板中,使其无效。为什么要有条件地呈现selectionMode=multiple的列?我已经有过两次类似的问题,这里不是这样的,但我为复选框不起作用的其他人编写了这篇文章。另外,请确保在和中没有selectionMode=multiple,否则它会中断。我刚刚在行键周围添加了{},因为它丢失了,但没有区别。您的数据表嵌套在h:窗体中吗?是的,在窗体中。我也尝试过将其放入面板和输出面板中,使其无效。为什么要有条件地呈现selectionMode=multiple的列?我已经有过两次类似的问题,这里不是这样的,但我为复选框不起作用的其他人编写了这篇文章。另外,请确保在和中没有selectionMode=multiple,否则它会中断。我刚刚在行键周围添加了{},因为它丢失了,但没有区别。您的数据表嵌套在h:窗体中吗?是的,在窗体中。我也尝试过将其放入面板和输出面板中,使其无效。为什么要有条件地呈现selectionMode=multiple的列?我已经有过两次类似的问题,这里不是这样的,但我为复选框不起作用的其他人编写了这篇文章。另外,请确保和中没有selectionMode=multiple,否则它会中断。