Checkbox PrimeFaces:如何使用selectionMode=";多个“;?

Checkbox PrimeFaces:如何使用selectionMode=";多个“;?,checkbox,primefaces,datatable,Checkbox,Primefaces,Datatable,我有一个和一个。当我在数据表中显示一个单行时,我希望我的应用程序自动检查这一行(以及表头上显示的“checkAll”复选框) 我已经通过JavaScript实现了这一点,并且它在视觉上起到了作用。但是,在提交表单时,似乎没有提交“checked”值。如果我点击复选框两次(取消选中并再次选中),它就会工作 JSF: <p:dataTable var="invoiceGroup" selection="#{chargeBean.selectedInvoiceGroup

我有一个
和一个
。当我在数据表中显示一个单行时,我希望我的应用程序自动检查这一行(以及表头上显示的“checkAll”复选框)

我已经通过JavaScript实现了这一点,并且它在视觉上起到了作用。但是,在提交表单时,似乎没有提交“checked”值。如果我点击复选框两次(取消选中并再次选中),它就会工作

JSF:

<p:dataTable var="invoiceGroup"
             selection="#{chargeBean.selectedInvoiceGroupBeans}"
             value="#{chargeBean.invoiceGroupList}"
             rowKey="#{invoiceGroup.id}">
    <p:column selectionMode="multiple" />
    ...
</p:dataTable>
function selectTableElements() {
    var checkBoxes = $('#invoiceGroupTable td.ui-selection-column input[type="checkbox"]');
    var paginatorPages = $('#invoiceGroupTable .ui-paginator .ui-paginator-pages .ui-paginator-page'); 
    if (checkBoxes.length === 1 && paginatorPages.length === 1) {
        setTimeout(function () {
            $('#invoiceGroupTable th input[type="checkbox"]').click();
        }, 10);
    }
}

有没有一种在服务器端执行此操作的方法?

首先,我更喜欢不带复选框的多选数据表
(只需按
CTRL
键即可多选)

其次,我不知道为什么不(在服务器端)检查列表(
invoiceGroupList
)是否只有一个成员/对象,并自动将其添加到第二个列表中,即
selectedInvoiceGroupBeans
。如果您仍然希望这也是可视化的,那么可以保留已经完成工作的javascript/jquery函数。此外,您还可以查看
Primefaces-RequestContext
组件:如果您想要更有趣的视觉设计,例如,在运行action方法之后选择甚至高亮显示该行,您可以从服务器端调用javascript函数


第三,为什么要使用
setTimeout
javascript函数?如果您按下执行提交的
commandButton
,然后单击调用javascript函数,该按钮将首先执行提交,然后选择复选框,这样您将无法获得预期的行为。

1。这是我们产品视觉标识的一部分,我们必须有多个选择的复选框。2.到现在为止,我做了这个检查,并更改了javascript以禁用复选框(除了检查它),如果只有一个元素。3.这是因为它是在呈现表的同时调用的。如果我不设置setTimeout,Internet Explorer将不让表渲染,并将执行
。单击“未渲染”元素上的
。@otuka我很高兴现在一切正常!