Sur*_*nut 4 ajax datatable performance jsf primefaces
我正在使用带有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>
Run Code Online (Sandbox Code Playgroud)
每次更改页面时,数据表都会使用当前页面的所有数据执行AJAX POST.正如您可以在下面的图像中看到的那样.

对于包含大量数据的大型表,这会产生巨大的请求.这不是必要的吗?有没有办法改变这种行为?
实际上,当您以HTML格式提交表单时,默认情况下,每个HTML输入元素都将作为请求参数发送.PrimeFaces AJAX组件因此提供partialSubmit="true"属性,那么将发送仅由所覆盖的HTML输入元素process的属性,默认在<p:ajax>到@this和<p:commandXxx>到@form.
因此,只需将其添加到数据表中,以便优化分页性能:
<p:ajax event="page" partialSubmit="true" />
Run Code Online (Sandbox Code Playgroud)
并将其添加到任何命令按钮,该按钮只需要访问数据表中的当前行(例如,在对话框中显示它)以优化操作处理性能:
<p:commandButton ... process="@this" partialSubmit="true" />
Run Code Online (Sandbox Code Playgroud)
您还可以通过以下上下文参数全局配置它web.xml:
<context-param>
<param-name>primefaces.SUBMIT</param-name>
<param-value>partial</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
然后,如果您确实需要完整提交,请明确使用partialSubmit="false".
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |