2011-07-05 8 views
1

私はメニューとして使用されるツリーを持っているので、すべてのノードはクリック可能で、別の* .xhtmlファイルを開きます。ツリーはテンプレートを含むすべての* .xhtmlファイルに表示されます。collapsing p:tree

問題:* .xhtmlファイルにリダイレクトすると、ツリーが崩壊します。驚くべきことに、選択されたノードは選択されたままである(選択されたように着色される)。木は崩壊してはならない!

ツリーは動的に生成されますが、生成されるのは1回だけです。

はPrimefaces 2.2.1でテストされ、3.0.M2

は、どのように私はこの問題を解決することができますか?プライムフェイスショーケースではこれが機能します。

マイコード:

<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されます。これは、primefaces showcaseとlistener関数の例に似たgetterとsetterを持っています。

@ManagedBean 
@SessionScoped 
public class StudentTree implements Serializable{ 
... 
    public void onNodeSelect(NodeSelectEvent event) { 
    ... 
    } 
} 

答えて

1

を解決しました。

Primeface 3.0.M2で動作します。私のライブラリやキャッシュデータに問題がありました。 3.0.M2を使用するためにいくつかの変更が行われました。

FE:

nodeSelectListener="#{studentTree.onNodeSelect}" 

が今

<p:ajax event="select" listener="#{studentTree.onNodeSelect}"/> 
2

マネージドBeanのプロパティ#{studentrTree.selectedNode}に値が設定されているため、ツリーノードが選択されたままになります。

マネージドBeanは@SessionScopedなので、ページを離れたりページを移動したりしてもセッションされます。それを@ViewScopedに変更する場合は、ページからナビゲートするとマネージドBeanが終了し、ページに戻ると、プロパティーselectedNodeが再びデフォルト値になります。

+0

に置き換えられ、多分私の質問は十分に明確ではありませんでした。)ノードを選択したまま、なぜ今、私は知っているが、なぜ木はさえて崩れませんセッションスコープ?それはしないでください。 – Ziagl