1

私は次のエンティティクラスを持っています:

@Entity
@Table(name = "THE_TREE", catalog = "", schema = "dbo")
public class TheTree implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "NODE_NAME")
private String name;

@Column(name = "LEVEL")
private int level;

@OneToMany    
@JoinColumn(name="PARENTID")    
public List<TheTree > children = new LinkedList<TheTree >();

これをprimefacesツリーに表現したいのですが、正しく理解できません。Primefaces Webサイトに示されている例には、事前定義された深さの静的ノードがあります。ここでは、深さが不明なノードが必要であり、データベースから入力する必要があります。ここでさまざまな投稿を見てきましたが、はっきりしたことは何もありません。この投稿では、作者が同じ質問をしたようですが、答えはどういうわけか質問に関連していません。任意の解決策をいただければ幸いです。

4

1 に答える 1

8

ツリーを作成するには、再帰関数を作成する必要があります。これは私がそれを行う方法です:

@ManagedBean
@ViewScoped
public class TreeMBean {

    private TreeNode rootNode;

     @PostConstruct
     public void init() {
         TheTree root = new TheTree(); // instead get root object from database 
         rootNode = newNodeWithChildren(root, null);
     }

     /**
      *  recursive function that returns a new node with its children
     */
     public TreeNode newNodeWithChildren(TheTree ttParent, TreeNode parent){
          TreeNode newNode= new DefaultTreeNode(ttParent, parent);
          for (TheTree tt : ttParent.getChildren()){
               TreeNode newNode2= newNodeWithChildren(tt, newNode);
          }
          return newNode;
     }

     public TreeNode getRootNode() {
         return rootNode;
     }

     public void setRootNode(TreeNode node) {
         rootNode = node;
     }

 }
于 2012-06-25T14:24:41.663 に答える