2010-11-25 10 views
3

に直面しています。 私はemplyeesを怠惰な方法でロードしたいので、loadEmplyeesIfNeeded拡張リスナを導入しました。 1つのこと以外はすべてうまく動作します。従業員は、オフィスノードが拡張された後にロードされます。したがって、ツリーがレンダリングされると、すべてのオフィスに従業員がなく、リーフとしてレンダリングされます。リッチリッチの顔ツリーの例を以下の点を考慮してください木問題

To長い店を短くする。子を持たなくてもノードをノード(レンダリング可能)で描画するように設定する方法はありますか? rich:treeNodeはisNodeのような属性を持っていますが、そうではありません。

b.t.w.私はオフィスの初期化時にすべてのオフィスに偽の従業員を追加するだけで解決することができます。しかし、それはまさに素晴らしい仕事ではありません...

ありがとうございます。

答えて

2

アプリケーションに別のライブラリを追加しても構わない場合は、OpenFaces TreeTableを使用します。レイジーローディングは、<o:treeTable>タグにpreloadedNodes = "none"(またはprelodedNodes = "levelsPreloaded:1")を追加するだけで実装でき、ノードの拡張トグルを表示するかどうかも自動的に検出されます。 OpenFaces TreeTableは非常にカスタマイズ可能で、必ずしも複数列のテーブルとして見えるわけではありませんが、単純なツリーとしても表示することができます(例:this page

このようなTreeTableを宣言できます実際にはより多くのカスタマイズを必要とするが、この例では)考えを示しています

<o:treeTable var="node" preloadedNodes="none"> 
    <o:dynamicTreStructure nodeChildren="#{treeTableBean.nodeChildren}"/> 
    <o:treeColumn> 
    <h:outputText value="node.name"/> 
    </o:treeColumn> 
</o:treeTable> 

treeTableBean.nodeChildren方法は、「ノード」変数の値をとり、その値がある場合はその子ノード(または戻りルートノードを返す必要がありますヌル)。この方法があなたのケースでどのように見えるかは次のとおりです。

public List getNodeChildren() { 
    Object node = Faces.var("node"); 
    if (node == null) 
    return getOffices(); 
    else 
    return ((Office) node).getEmployees(); 
} 
4

少し遅れていますが、知るか。

私が行ったようにorg.richfaces.model.TreeNodeImplを拡張することができます。

public class RichTreeNodeImpl extends org.richfaces.model.TreeNodeImpl { 

     private boolean treatAsNode; 

     public boolean getTreatAsNode() { 
     return treatAsNode; 
     } 

     public void setTreatAsNode(boolean treatAsNode) { 
     this.treatAsNode = treatAsNode; 
     } 

     @Override 
     public boolean isLeaf() { 
      if (this.treatAsNode) 
       return false; 
      else 
       return super.isLeaf(); 
     } 
    } 
+0

このムスク作品は、 – caarlos0

+0

元の実装をどのように置き換えることができますか? –

関連する問題