p:tree
コンポーネントの ajax イベントに問題があります
xhtml コードは次のとおりです。
<form id="form1">
<!-- Other components -->
<p:panel id="panel1" binding="#{panel1}"
header="..." toggleable="true" toggleSpeed="500"
collapsed="false" dynamic="true"
rendered="#{service.checkMethod(...)}">
<div class="column">
<p:tree id="treeId" value="#{tree.root}"
var="node" selectionMode="single"
rendered="#{tree != null}"
selection="#{flowScope.selectedNode}"
widgetVar="treeId"
process="tree">
<p:ajax event="select" process="@this"
update="@this :#{anotherPanel.clientId} :#{anotherPanel2.clientId}"
listener="#{service.onNodeSelect}" oncomplete="setSelectedNode()" />
<p:ajax event="expand" process="@this" listener="#{service.onNodeExpand}" />
<p:ajax event="collapse" process="@this" listener="#{service.onNodeCollapse}" />
<p:treeNode>
<h:outputLabel value="#{node.attribute}" />
</p:treeNode>
</p:tree>
<h:outputLabel
value="Empty"
rendered="#{tree.isEmpty()}" />
</div>
</p:panel>
<!-- Other components -->
</form>
panel1 のレンダリングされた属性には、更新されるたびに新しいツリーを作成するメソッドがありますが、どういうわけか、ツリー上のすべての ajax イベントがそのメソッドを呼び出しています。更新が定義されていない展開と折りたたみの更新でさえ、それを行っています。
さまざまなタイプの更新とプロセスを使用して、すべてのajaxglobal="false", immediate="true"
イベントに を配置したり、ツリーとパネルの間に他のパネルを配置したりしましたが、同じ効果があります。このメソッドが他の場所で呼び出されていないことを確認するために、すべてのファイルを Eclipse で検索しましたが、ここでのみ使用されています。
ツリー ajax イベントが上記のパネルを再レンダリングしないようにする方法はありますか?