我有一个用作菜单的树,因此每个节点都是可点击的,并打开另一个* .xhtml文件。树上显示每个带有模板的* .xhtml文件。
问题:如果重定向到* .xhtml文件,树会崩溃。令人惊讶的是,所选节点保持选中状态(它被选为彩色)。树不应该崩溃!
树是动态生成的,但它只生成一次。
使用Primefaces 2.2.1和3.0.M2进行测试
我该如何解决这个问题?在primefaces展示这个作品。
我的代码:
<h:form id="formTreeStudents">
<p:tree id="treeGroups"
value="#{studentTree.root}"
var="node"
cache="true"
selectionMode="single"
nodeSelectListener="#{studentTree.onNodeSelect}"
selection="#{studentrTree.selectedNode}"
onselectComplete="ajaxDialog.show();"
update="statusbar userbar">
<p:treeNode>
<h:outputText value="#{node.treeString}" styleClass="treeNodeParent"/>
</p:treeNode>
</p:tree>
<p:ajax event="load" onstart="ajaxDialog.hide();"/>
</h:form>
bakingBean是sessionScoped。它有getter和setter,类似于primefaces showcase和一个监听器函数的例子。
@ManagedBean
@SessionScoped
public class StudentTree implements Serializable{
...
public void onNodeSelect(NodeSelectEvent event) {
...
}
}
答案 0 :(得分:2)
树节点保持选中状态,因为托管bean的属性#{studentrTree.selectedNode}
具有值。
您的托管bean是@SessionScoped
,因此即使您离开并返回该页面,它也会在会话中生效。如果您要将其更改为@ViewScoped
,那么当您离开页面时托管bean将会死亡,当您导航回页面时,属性selectedNode
将再次成为其默认值。
答案 1 :(得分:1)
解决了它。
适用于Primefaces 3.0.M2。我的库或缓存数据出了问题。 必须进行一些更改才能使用3.0.M2。
f.e:
nodeSelectListener="#{studentTree.onNodeSelect}"
现在替换为
<p:ajax event="select" listener="#{studentTree.onNodeSelect}"/>