我有<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);
}
}
有没有办法做这个服务器端?
答案 0 :(得分:0)
首先,我更喜欢多选数据表without checkboxes
(仅使用CTRL
键http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionMultiple.jsf多次选择。)
其次,我不知道为什么你不检查(在服务器端)列表(invoiceGroupList
)是否只有一个成员/对象并自动添加到第二个列表{{1 }}。如果您仍然希望这也是可视化的,那么您可以保留已经完成它的javascript / jquery功能。您还可以查看selectedInvoiceGroupBeans
组件:如果您想要一些更有趣的视觉设计,可以从服务器端调用javascript函数,例如在运行操作方法后要选择或甚至突出显示的行 - { {3}}
第三,为什么使用Primefaces RequestContext
javascript函数?如果您按下提交提交的setTimeout
并单击调用您的javascript函数,该按钮将首先执行提交,然后选中您的复选框,这样您将无法获得预期的行为。