ajax performance jsf primefaces datatable

Cómo disminuir la carga útil de solicitud de p: ajax durante, por ejemplo, paginación p: dataTable



performance jsf (1)

De hecho, cuando envía un formulario en HTML, por defecto, cada elemento de entrada HTML se enviará como parámetro de solicitud. Por lo tanto, los componentes PrimeFaces ajax ofrecen el partialSubmit="true" que luego enviará solo los elementos de entrada HTML cubiertos por el atributo de process , que por defecto está en <p:ajax> a @this y en <p:commandXxx> a @form .

Entonces, solo agregue esto a la tabla de datos en caso de que optimice el rendimiento de la paginación:

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

Y agregue esto a cualquier botón de comando que solo necesite acceder a la fila actual en la tabla de datos (por ejemplo, para mostrarla en un cuadro de diálogo) para optimizar el rendimiento del procesamiento de acciones:

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

También puede configurarlo globalmente a través del siguiente parámetro de contexto en web.xml :

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

Y luego, para los casos en los que realmente necesite un envío completo, utilice de manera explícita partialSubmit="false" .

Estoy usando JSF 2.2 con Primefaces 5.1. Hay una tabla de datos editables de primefaces con paginación habilitada.

<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>

Cada vez que se cambia la página, la tabla de datos realiza una AJAX POST con todos los datos de la página actual. Como puede ver en parte en la imagen a continuación.

Para tablas grandes con muchos datos, esto genera grandes solicitudes. Esto no es necesario, ¿verdad? ¿Hay alguna manera de cambiar este comportamiento?