Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Primefaces数据表中检测行选择?_Primefaces_Jsf 2 - Fatal编程技术网

如何在Primefaces数据表中检测行选择?

如何在Primefaces数据表中检测行选择?,primefaces,jsf-2,Primefaces,Jsf 2,我使用Prime Faces 6.2构建复选框列。有以下样本: <p:dataTable id="List" value="#{tickets}" lazy="true" paginator="true" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {N

我使用Prime Faces 6.2构建复选框列。有以下样本:

<p:dataTable id="List"
                 value="#{tickets}"
                 lazy="true"
                 paginator="true"
                 paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                 currentPageReportTemplate="{startRecord}-{endRecord} из {totalRecords}"
                 rows="20"
                 rowKey="#{ticket.id}"
                 selection="#{ticketForm.abstractMTSBUExportTickets}"
                 var="ticket"
                 emptyMessage="Записи в данной категории отсутствуют">

<p:column selectionMode="multiple" style="width:40px; text-align:center">
    <!-- <p:ajax event="click" listener="#{form.abstractMTSBUExportTickets}" /> --> // first try
    <!-- <p:commandLink id="select" action="doSome" /> --> // second try
</p:column>

//初试
//第二次尝试
使用ajax的目的是使页面上的某些按钮在至少选中一个复选框时可见。 首先,我尝试将p:ajax标记插入到column标记中,但出现异常:

 <p:ajax> Unable to attach behavior to non-ClientBehaviorHolder parent
无法将行为附加到非ClientBehaviorHolder父级
更明显的方法是将命令链接插入到中,但它什么也没做。
那么,有什么实践可以做到这一点吗?感谢您提前给出答案。

是的,您很接近,但您需要知道的是,在数据表上,而不是复选框上,什么是Ajax。PF在datatable上提供这两个Ajax事件,用于通知或选中或取消选中框

 <p:datatable>
       <p:ajax event="rowSelect" listener="#{dtSelectionView.onRowSelect}" update=":form:mybutton" />
       <p:ajax event="rowUnselect" listener="#{dtSelectionView.onRowUnselect}" update=":form:mybutton" />
       ...
</p:datatable>

...
有关详细信息,请参见Showcase中的选择事件示例:

你可以简单地做一些类似的事情,选择和取消选择方法将触发更新你的选择,你可以使用EL表达式启用按钮,如

<p:commandButton id="mybutton" disabled="#{ticketForm.abstractMTSBUExportTickets.size > 0}" />

是。它起作用了。对我来说,我只是添加了“rowSelectCheckbox”和“rowSelectCheckbox”事件和更新按钮。