如何在Datatable中以编程方式取消选择已选行

5
在我的应用程序中,我在一个对话框中显示了一个数据表,每列都有一个复选框来选择相应的行。在对话框的底部,我放置了两个按钮,一个用于显示所选行,另一个用于重置数据表,即取消选择所选行。
下面是.xhtml代码:
<p:dialog id="popUp" header="Activity Detail" widgetVar="popUpWidget" 
 showEffect="fade" hideEffect="explode" resizable="false" modal="true">
<h:panelGrid>
    <p:row>
        <p:column colspan="2">
            <p:dataTable id="userListForAdminpopup" value="#{activityListController.activityUsers}" var="user"
                paginator="true" paginatorPosition="bottom" widgetVar="userListForAdminpopUp"
                paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                rows="10" selection="#{activityListController.selectedActivityUsers}">

                <p:column headerText="#{adbBundle['fullName']}"
                    sortBy="#{user.lastName}" filterBy="#{user.fullName}"
                    filterMatchMode="contains" styleClass="userName">
                    <h:outputLabel value="#{user.firstName}" />
                </p:column>

                <p:column selectionMode="multiple" />
            </p:dataTable>
        </p:column>
    </p:row>
    <p:row>
        <p:column colspan="2">
            <h:panelGroup layout="block">
                <p:commandButton value="Update" oncomplete="confirmation.show()"/>
                <p:commandButton value="Reset"/>
            </h:panelGroup>
        </p:column>
    </p:row>
</h:panelGrid></p:dialog>

当单击重置按钮时,我希望取消选择行。如何实现?


你需要将selection="#{activityListController.selectedActivityUsers}"设置到你想要设置的对象上,然后通过ajax更新datatable。 - Rong Nguyen
谢谢您的回复。有任何例子吗? - Diganta
3个回答

13

我们可以使用 unselectAllRows() 取消选择 p:dataTable 行。

<p:dataTable
    id="dataTableId"                             
    widgetVar="dtWidgetVar"
    value="#{myBean.items}"
    var="item"
    ....>
</p:dataTable>

<p:commandButton value="Reset" onclick="PF('dtWidgetVar').unselectAllRows()" />

从豆子中

PrimeFaces.current().executeScript("PF('dtWidgetVar').unselectAllRows()");

9
根据PrimeFaces 5.2的要求,它将为 onclick="PF('dtWidgetVar').unselectAllRows();"。 - Nigel Thomas
1
如果您只想执行一些JavaScript代码,就不应该使用p:commandButton。请改用p:button - Jasper de Vries

3
你尝试:
<p:commandButton value="Reset" update="userListForAdminpopup" process="@this" actionListener="#{activityListController.hand}"/>

Bean:

public void hand(){
   selectedActivityUsers = new ActivityUsers(); // Type of element of list
}

0

试试这个:

DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("form:dataTable"); 
dataTable.reset();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接