PrimeFaces:如何使用selectionMode =“multiple”检查p:列?

时间:2011-11-21 16:47:52

标签: checkbox primefaces datatable

我有<p:dataTable> <p:column selectionMode="multiple" />。当我在dataTable中显示单行时,我希望我的应用程序自动检查此行(以及表头上显示的“checkAll”复选框)。< / p>

我是通过JavaScript完成的,它在视觉上有效。但是,在提交表单时,似乎未提交“已检查”值。如果我单击复选框两次(取消选中并再次检查),则可以正常工作。

JSF:

<p:dataTable var="invoiceGroup"
             selection="#{chargeBean.selectedInvoiceGroupBeans}"
             value="#{chargeBean.invoiceGroupList}"
             rowKey="#{invoiceGroup.id}">
    <p:column selectionMode="multiple" />
    ...
</p:dataTable>

Javascript代码:

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);
    }
}

有没有办法做这个服务器端?

1 个答案:

答案 0 :(得分:0)

首先,我更喜欢多选数据表without checkboxes(仅使用CTRLhttp://www.primefaces.org/showcase-labs/ui/datatableRowSelectionMultiple.jsf多次选择。)

其次,我不知道为什么你不检查(在服务器端)列表(invoiceGroupList)是否只有一个成员/对象并自动添加到第二个列表{{1 }}。如果您仍然希望这也是可视化的,那么您可以保留已经完成它的javascript / jquery功能。您还可以查看selectedInvoiceGroupBeans组件:如果您想要一些更有趣的视觉设计,可以从服务器端调用javascript函数,例如在运行操作方法后要选择或甚至突出显示的行 - { {3}}

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