3

PrimefacesTreeTableノードは逆の方法で機能するようです。

親を作成してから子を作成します。それが属する親を子に指示するよりもです。親は自分の子供を知っているべきであり、その逆ではありません。

だから...私の問題は:

データベース(祖父母、親、子供、孫)から未定義の量のデータをロードする必要があります。

それらをTreeTableに動的にロードする方法は?for-each内でTreeNodeを作成し、その親を設定する方法を考えることはできません。

誰でも私とアイデアを与えることができますか?

4

1 に答える 1

1

このソリューションはまだテストしていませんが、機能するはずです。Primefacesショーケースの例はすべてハードコーディングされています。動的にするには、配列を操作する必要があります。
したがって、たとえば、以下のハードコードされたコードのセクション:

 TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root);  
 TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root);  
 TreeNode music = new DefaultTreeNode(new Document("Music", "-", "Folder"), root);

次のように置き換えることができます:

 Map<String, TreeNode> rootNodes = new HashMap<String, TreeNode>();

 //Retrieve the list of root Nodes. eg Tables in the database.
 for(Table table : databaseTables){

    //table.getTableName() will be the name of the node, it could be something like "music" or "documents"
    rootNodes.add(table.getTableName(), new DefaultTreeNode(table.getTableName(), new Document......, root);
 }

それらをマップに追加する理由は、それらを参照したい場合に、キーを参照として使用できるようにするためです。たとえば、画像ノードにノードを追加する場合

 //Create a new map
 Map<String, TreeNode> pictureNodes = new HashMap<String, TreeNode>();

 //now loop through your picture objects
for(picture : pictures){
    pictureNode.add(new DefaultTreeNode(picture.getName(), ......., root.get("pictures"));
}

この方法を使用すると、可能な限り多くの階層を再帰的にループできます。私は現在オフィスにいるので、このコード(メモ帳++のみ)をテストできませんでした。しかし、それを試してみてください。まだ行き詰まっている場合は、数時間で家に帰ったら、もっと詳細なことをすることができます。

于 2012-09-04T13:34:15.300 に答える