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

时间:2018-07-30 12:46:59

标签: primefaces jsf-2

我使用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标签插入列标签,但出现异常:

 <p:ajax> Unable to attach behavior to non-ClientBehaviorHolder parent

更明显的方法是将命令链接插入其中,但是它什么也没做。 那么,有什么实践可以做到这一点吗?感谢您提前回答。

1 个答案:

答案 0 :(得分:2)

是的,您很接近,但是在数据表上而不是在复选框上,什么是Ajax。 PF在数据表上提供了这两个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>

有关更多信息,请参见展示柜中的“选择事件”示例:https://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml

您只需在Select和Unselect方法中执行类似操作即可触发更新选择,您可以使用EL表达式启用按钮,例如...

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