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 事件都在调用该方法。甚至没有定义更新的展开和折叠更新也在这样做。
我已经尝试global="false", immediate="true"
在所有 ajax 事件上使用不同类型的更新和处理,或者在树和面板之间放置其他面板,但它具有相同的效果。我用 Eclipse 搜索了我所有的文件,以确保这个方法没有在其他地方调用,但它只在这里使用。
有没有办法防止树 ajax 事件重新渲染上面的面板?