【问题标题】:Primefaces datatable unselect row on click with multiple selectionPrimefaces数据表在单击时取消选择行并进行多项选择
【发布时间】:2016-06-02 21:19:31
【问题描述】:

如何仅通过单击取消选择 dataTable primefaces 上的选定行,与选择行的工作方式相同。

这是我目前用来选择和取消选择的代码,但取消选择需要按 CtrlCMD(在 mac 上)键。

<p:dataTable
    value="#{adminiClubReconManager.bankMovementsFound}" var="movs"
    style="width:90%;border: 0px;"
    selection="#{adminiClubReconManager.selectedBankMovement}"
    rowKey="#{movs.id}" editable="true" styleClass="rowStyle"
    paginator="true" rowsPerPageTemplate="5,10,15" rows="10"
    selectionMode="mutiple"
    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
    <p:ajax event="rowSelect"
        listener="#{adminiClubReconManager.onBankRowSelect()}"
        update="@form:reconMessages" />
    <p:ajax event="rowUnselect"
        listener="#{adminiClubReconManager.onBankRowUnselect()}"
        update="@form:reconMessages" />
    <p:column
        style="background:transparent;border:0px;text-align:left">
        <c:facet name="header">
            <h:outputText
                value="#{msg['admini.common.movement.recon.number']}" />
        </c:facet>
        <h:outputText value="#{movs.id}"
            style="background:transparent;border:0px" />
    </p:column>
    ...
</p:dataTable>

【问题讨论】:

  • Afaik,对此有一个态度。检查文档
  • rowSelectMode。给它“添加”的值可能会导致你想要的。
  • 你给它一个值'add'是什么意思?在 p:ajax 上如何以及在何处执行此操作?
  • 好的,我刚刚看到:'定义多选的行选择模式。有效值为“new”、“add”和“checkbox”。但这不适用于取消选择选定的行并保持其他已选择的行
  • 是的,我使用的是 5.3 版本,现在我使用的是 6.0 但还是一样,我需要 crtl 键来取消选择选定的行

标签: jsf primefaces


【解决方案1】:

我们有 2 种可能性来解决这个问题。

第一

创建commandButton并调用primefaces方法unselectAllRows();

<p:dataTable id="dataTableId" var="p" value="#{myBean.dataModel}" paginator="true" rows="50" paginatorPosition="bottom" emptyMessage="Empty results" rowKey="#{p.attribute}" selection="#{myBean.atributeList}" widgetVar="dataTableWidgetVar">`
   <p:commandButton widgetVar="buttonClear" value="Clear selection" onclick="dataTableWidgetVar.unselectAllRows();"/>
</p:dataTable>

单击后,您将取消选择行

第二

通过ajaxEvent调用primefaces方法unselectAllRows();

<p:dataTable id="dataTableId" var="p" value="#{myBean.dataModel}"                                                                                                                     paginator="true" rows="50" paginatorPosition="bottom" emptyMessage="Empty results" rowKey="#{p.attribute}" selection="#{myBean.atributeList}" widgetVar="dataTableWidgetVar">`
    <p:ajax event="page" update="dataTableId" oncomplete="dataTableWidgetVar.unselectAllRows();"/>
 ...
</p:dataTable>

在这种情况下,当您单击另一个页面(例如第 3 页)时,您选择了第一页的数据,ajax 执行该方法 取消选择所有行();并且你清除你已经选择了。

为了解决这个问题,我在 primefaces 论坛上找到了这个材料:https://forum.primefaces.org/viewtopic.php?f=3&t=24144

【讨论】:

  • 请阅读关于该问题的最后一条评论。根据您的回答,行为是在那里描述的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2011-02-01
相关资源
最近更新 更多