<h:form id="form">
<p:panel id="panel">
<p:messages autoUpdate="true"/>
<p:inputText value="#{bean.value1}" required="true"/><br/>
<p:inputText value="#{bean.value2}" required="true"/><br/>
<p:commandButton partialSubmit="true"
process="panel"
update="@none"
actionListener="#{bean.action}"
value="Submit"/>
</p:panel>
<p:panel id="panel1"></p:panel>
<p:panel id="panel2"></p:panel>
<p:panel id="panel3"></p:panel>
<!-- Other components -->
</h:form>
在这样的例子中,虽然要处理的组件用process
显式列出,但是否总是值得将partialSubmit
设置为true
?它对性能的影响是小还是大?
当要处理的组件被process
显式列出时,这应该不需要,因为视图是自动部分处理的。
在这两种情况下,收到的日志消息将是相同的,如下所示:
10/24/2015, 9:38:20 AM : Initiating ajax request.
10/24/2015, 9:38:20 AM : Form to post form.
10/24/2015, 9:38:20 AM : URL to post /Project/location/Test.
10/24/2015, 9:38:20 AM : Post Data:javax.faces.partial.ajax=true&javax.faces.source=form%3Aj_idt11&javax.faces.partial.execute=form%3Apanel&javax.faces.partial.render=%40none&form%3Aj_idt11=form%3Aj_idt11&form%3Aj_idt8=qqq&form%3Aj_idt10=qqq&javax.faces.ViewState=-8717858113332784641%3A8629301927694502525
10/24/2015, 9:38:20 AM : Response received succesfully.
10/24/2015, 9:38:20 AM : DOM is updated.
10/24/2015, 9:38:20 AM : Response completed.
在你发布的例子中,它确实没有什么不同。你所有的输入都在你"处理"的面板内。如果您将其中一个输入放在面板之外,您将看到该输入的值没有提交。
对于小型表单没有真正的优势,但对于包含许多ajax调用的大型表单,它确实有区别。查看PrimeFaces展示中的"好"示例