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

我在Primefaces 5.1中使用JSF 2.2。 有一个可编辑的启用分页的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。 正如你可以在下面的图片中看到的一样。

在这里输入图像描述

对于包含大量数据的大型表格,这会导致巨大的请求。 这不是必需的吗? 有没有办法改变这种行为?

事实上,当你用HTML提交一个表单时,默认情况下每个HTMLinput元素都将作为请求参数发送。 因此,PrimeFaces ajax组件提供了partialSubmit="true"属性,然后该属性将发送由process属性覆盖的HTMLinput元素,默认情况下<p:ajax>@this<p:commandXxx>@form

所以,只要将其添加到数据表中以便优化分页性能:

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

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

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

您也可以通过web.xml下面的上下文参数来全局configuration它:

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

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