无法使用 selection 在 primefaces 数据表中 select 复选框
Can't select checkbox in primefaces datatable using selection
我在 primefaces 中有一个数据表并希望 select 多行,但是当我将鼠标悬停在它上面时复选框没有突出显示并且当我单击时无法 selected。
复选框确实已启用。这是代码:
<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 方法中只有一个日志,因此即使未选中复选框,我也可以查看是否正在调用该方法,但事实并非如此。
就像我说的那样,所有复选框都像其他所有内容一样呈现,并且它们不会像被禁用一样褪色,但它们的行为就像它们被禁用一样。我曾尝试删除 styleClasses 以查看它们是否以某种方式影响事物,但它们没有。
我的项目中还有其他工作示例,据我所知,我已将此 dataTable 设置得完全相同,但由于某种原因它无法正常工作。 xhtml 具有与这些其他页面相同的 ui:compposition 和相同的 outputStylesheets 和 outputScripts 以及相同的基本布局,所以我确信我从 dataTable 中遗漏了一些东西,但不知道是什么。
我添加了一个小测试 table,如下所示,其中包含一个名为 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>
任何建议表示赞赏。
谢谢
删除列中呈现的标签后,您应该可以 select 复选框。我认为这是因为它删除了 table 的顶部和切换所有复选框导致其余部分静默失败
我在 primefaces 中有一个数据表并希望 select 多行,但是当我将鼠标悬停在它上面时复选框没有突出显示并且当我单击时无法 selected。
复选框确实已启用。这是代码:
<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 方法中只有一个日志,因此即使未选中复选框,我也可以查看是否正在调用该方法,但事实并非如此。
就像我说的那样,所有复选框都像其他所有内容一样呈现,并且它们不会像被禁用一样褪色,但它们的行为就像它们被禁用一样。我曾尝试删除 styleClasses 以查看它们是否以某种方式影响事物,但它们没有。
我的项目中还有其他工作示例,据我所知,我已将此 dataTable 设置得完全相同,但由于某种原因它无法正常工作。 xhtml 具有与这些其他页面相同的 ui:compposition 和相同的 outputStylesheets 和 outputScripts 以及相同的基本布局,所以我确信我从 dataTable 中遗漏了一些东西,但不知道是什么。
我添加了一个小测试 table,如下所示,其中包含一个名为 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>
任何建议表示赞赏。
谢谢
删除列中呈现的标签后,您应该可以 select 复选框。我认为这是因为它删除了 table 的顶部和切换所有复选框导致其余部分静默失败