繁体   English   中英

使用Ajax更新Primefaces数据表摘要行

[英]Updating Primefaces datatable summary row using Ajax

提交表单(对话框)后,如何更新primefaces数据表摘要行?

经过一些CRUD操作后,数据表已经正确更新,但是摘要行却没有。 我在过滤数据表时使用p:remoteCommand更新摘要行,并且工作正常。

List.xhtml:

<h:form id="TreinamentosListForm">
<p:panel header="#{treinaBundle.ListTreinamentosTitle}" >
    <p:remoteCommand name="updateFooterSumCountId" update="datalist:footerSumCountId" />
    <p:dataTable id="datalist"
                filteredValue="#{treinamentosController.filteredTreinamentos}"
                value="#{treinamentosController.items}"
                var="item"
                rowKey="#{item.id}"
                paginator="true"
                selectionMode="single"
                selection="#{treinamentosController.selected}">
        <p:ajax event="filter" process="@form" update="@this" listener="#{treinamentosController.onFilter}" oncomplete="updateFooterSumCountId()" />
        <p:ajax event="rowSelect"   update=":TreinamentosListForm:createButton :TreinamentosListForm:viewButton :TreinamentosListForm:editButton :TreinamentosListForm:deleteButton :TreinamentosListForm:TreinamentosDataTableContextMenu" listener="#{treinamentosController.resetParents}"/>
        <p:ajax event="rowUnselect" update=":TreinamentosListForm:createButton :TreinamentosListForm:viewButton :TreinamentosListForm:editButton :TreinamentosListForm:deleteButton :TreinamentosListForm:TreinamentosDataTableContextMenu" listener="#{treinamentosController.resetParents}"/>
        <p:ajax event="rowDblselect" onsuccess="document.getElementById('TreinamentosListForm:viewButton').click();"/>

        <p:column sortBy="#{item.id}" filterBy="#{item.id}" style="text-align: right">
            <f:facet name="header">
                <h:outputText value="#{treinaBundle.ListTreinamentosTitle_id}"/>
            </f:facet>
            <h:outputText value="#{item.id}"/>
        </p:column>

        <p:columnGroup id="totalGroup"  rendered="true" type="footer" >
            <p:row>
                <p:column style="text-align:right">
                    <f:facet name="footer">
                        <!-- the summary row: -->
                        <h:outputText id="footerSumCountId" value="#{treinamentosController.sumCountId}" />
                    </f:facet>
                </p:column>
            </p:row>
        </p:columnGroup>        
    </p:dataTable>
    <f:facet name="header">
        <p:commandButton id="createButton" icon="ui-icon-plus"   value="#{treinaBundle.Create}" actionListener="#{treinamentosController.prepareCreate}" update=":TreinamentosCreateForm" oncomplete="PF('TreinamentosCreateDialog').show()"/>
        <p:commandButton id="viewButton"   icon="ui-icon-search" value="#{treinaBundle.View}" update=":TreinamentosViewForm" oncomplete="PF('TreinamentosViewDialog').show()" disabled="#{empty treinamentosController.selected}"/>
        <p:commandButton id="editButton"   icon="ui-icon-pencil" value="#{treinaBundle.Edit}" update=":TreinamentosEditForm" oncomplete="PF('TreinamentosEditDialog').show()" disabled="#{empty treinamentosController.selected}"/>
        <p:commandButton id="deleteButton" icon="ui-icon-trash"  value="#{treinaBundle.Delete}" actionListener="#{treinamentosController.delete}" update=":growl,datalist" disabled="#{empty treinamentosController.selected}">
        <p:confirm header="#{treinaBundle.ConfirmationHeader}" message="#{treinaBundle.ConfirmDeleteMessage}" icon="ui-icon-alert"/>
        </p:commandButton>
    </f:facet>
</p:panel>
<ui:include src="/WEB-INF/include/confirmation.xhtml"/>
</h:form>

Create.xhtml:

<p:dialog id="TreinamentosCreateDlg" widgetVar="TreinamentosCreateDialog" modal="true" resizable="false" appendTo="@(body)" header="#{treinaBundle.CreateTreinamentosTitle}" closeOnEscape="true" > 
    <h:form id="TreinamentosCreateForm">

        <h:panelGroup id="display" rendered="#{treinamentosController.selected != null}">
            <p:panelGrid columns="2" columnClasses="column">

                <p:outputLabel value="#{treinaBundle.CreateTreinamentosLabel_id}" for="id" />
                <p:outputLabel id="id" value="Value automatically generated from database." title="#{treinaBundle.CreateTreinamentosTitle_id}" />

            </p:panelGrid>
            <p:commandButton actionListener="#{treinamentosController.saveNew}" value="#{treinaBundle.Save}" update="@all,display,:TreinamentosListForm:datalist,:growl" oncomplete="handleSubmit(xhr,status,args,PF('TreinamentosCreateDialog'));">
                <p:confirm header="#{treinaBundle.ConfirmationHeader}" message="#{treinaBundle.ConfirmCreateMessage}" icon="ui-icon-alert"/>
            </p:commandButton>

            <p:commandButton value="#{treinaBundle.Cancel}" onclick="PF('TreinamentosCreateDialog').hide()"/>
        </h:panelGroup>
    </h:form>
</p:dialog>

提前致谢。

阅读了Primefaces 5文档之后,我要做的是调用(在Create.xhtml中)Primefaces过滤器方法,并通过在目标数据表(在List.xhtml中)中定义的widgetVar进行引用。 这样做会触发我的p:remoteCommand,而后者又会触发摘要行的更新:

<p:commandButton actionListener="#{treinamentosController.saveNew}" value="#{treinaBundle.Save}" update="@this,display,:TreinamentosListForm:datalist,:growl" oncomplete="handleSubmit(xhr,status,args,PF('TreinamentosCreateDialog'),PF('treinamentosTable').filter());" >
    <p:confirm header="#{treinaBundle.ConfirmationHeader}" message="#{treinaBundle.ConfirmCreateMessage}" icon="ui-icon-alert"/>
</p:commandButton>

如果有人有更好的解决方案,请分享。 我没时间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM