<h:form id="linkpanel">
<p:commandLink id="TestPanle" value="Test" update="contentOutputPanelId"/>
</h:form>
...
<h:form id="reRenderForm">
<p:outputPanel id="contentOutputPanelId" deferred="true" style="padding:5px;">
<ui:include src="/pages/test.xhtml"/>
</p:outputPanel>
<h:form>
当我按下commandLink按钮时,它将更新和contentOutputPanelId并包含test.xhtml。我怀疑是没有deferred =“true”它不会包括页面当我按下刷新页面它工作正常。否则givent deferred =“true”它工作正常。
你的怀疑是合理的:
ui:include
是一个taghandler,而p:outputpanel
是UIComponent
。标签处理程序在视图构建时进行评估和解析,即在设置视图的组件树时(基本上,决定页面中实际的内容)。另一方面,该组件在视图渲染时进行评估,这主要与标记解释有关
这对你意味着什么,因为在评估ui:include
时,p:outputPanel
不在图片中,因此,不能影响其处理。包含将发生。
Taghandler仅在新页面加载时进行评估,而不是在回发时进行评估,因此在那时它不再重要