【发布时间】:2015-05-22 12:54:17
【问题描述】:
我在 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 方法内部只有一个日志,因此即使未选中复选框,我也可以查看是否正在调用该方法,但事实并非如此。
就像我说的那样,所有复选框都像其他所有内容一样呈现,并且它们不会像被禁用一样褪色,但它们的行为就像它们被禁用一样。我曾尝试删除 styleClasses 以查看它们是否以某种方式影响事物,但事实并非如此。
我的项目中有其他工作示例,据我所知,我已将这个 dataTable 设置为完全相同,但由于某种原因它无法正常工作。 xhtml 具有与这些其他页面相同的 ui:compposition 和相同的 outputStylesheets 和 outputScripts 以及相同的基本布局,所以我确信我从 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>
任何建议表示赞赏。
谢谢
【问题讨论】:
-
我刚刚在 rowKey 周围添加了 #{},因为它丢失了,但没有任何区别
-
您的数据表是否嵌套在
h:form中? -
是的,在表单中。也试过把它放在一个面板和输出面板内无济于事
-
为什么有条件地渲染具有
selectionMode="multiple"的列? -
我遇到过两次类似的问题,这里不是这种情况,但我是为其他复选框不起作用的人写的。额外确保您没有在
</p:dataTable>和<p:column>中都有selectionMode="multiple",否则它会中断。
标签: jsf checkbox primefaces datatable