如何在例如p:dataTable分页期间减少p:ajax请求的负载?

5
我正在使用JSF 2.2和Primefaces 5.1。有一个启用分页的可编辑Primefaces数据表格。
            <p:dataTable editMode="row" 
                         editable="true" 
                         value="#{usersBean.users}" 
                         var="user" paginator="true" rows="20">

                <p:ajax event="rowEditInit" onstart="handleRowEditInit(event,this);"/>

                <p:column>
                    <p:rowEditor/>
                </p:column>
                <p:column headerText="Real name">
                    <p:cellEditor rendered="true">
                        <f:facet name="input">
                            <p:inputText value="#{user.realName}"/>
      </f:facet>
                            <f:facet name="output">
                                <h:outputText value="#{user.realName}"/>
                            </f:facet>
</p:cellEditor>
                </p:column>
                <p:column headerText="User name">
                    <p:cellEditor>
                        <f:facet name="input">
                            <p:inputText value="#{user.userName}"/>
                        </f:facet>
                        <f:facet name="output">
                            <h:outputText value="#{user.userName}"/>
                        </f:facet>
                    </p:cellEditor>
                </p:column>
            </p:dataTable>

每次页面更改时,数据表格都会使用当前页面的所有数据进行AJAX POST。如下图所示。 enter image description here 对于具有大量数据的大型表格,这会导致巨大的请求。这不是必要的,对吗?有没有一种方法可以改变这种行为?
1个回答

9

事实上,在HTML中提交表单时,默认情况下每个HTML输入元素都会作为请求参数发送。因此,PrimeFaces ajax组件提供了partialSubmit="true"属性,该属性仅会发送由process属性覆盖的HTML输入元素,而在<p:ajax>中默认为@this,在<p:commandXxx>中默认为@form

因此,只需将此添加到数据表中即可优化分页性能:

<p:ajax event="page" partialSubmit="true" />

将以下代码添加到仅需要访问数据表中当前行的任何命令按钮中(例如,将其显示在对话框中)以优化操作处理性能:

<p:commandButton ... process="@this" partialSubmit="true" />

您也可以通过以下在web.xml中配置的上下文参数进行全局配置:

<context-param>
    <param-name>primefaces.SUBMIT</param-name>
    <param-value>partial</param-value>
</context-param>

对于需要完整提交的情况,请明确使用 partialSubmit="false"


@BaslusC 我在 p:dataTablep:dialog 周围有一个 h:form。在数据表中,我注册了一个 p:ajax 事件,单击一行以显示该对话框。这种更改是否也会影响此类请求的性能?这里不编辑页面行。 - Roland

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