2012-06-25 2 views
1

У меня есть следующий класс сущностей:Primefaces дерева из базы данных

@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, есть статические узлы с предопределенной глубиной, где мне нужны узлы с неизвестной глубиной и заполняются из базы данных. Здесь я видел разные посты, но мне ничего не ясно. В этом post кажется, что автор задал тот же вопрос, но ответ каким-то образом не относится к вопросу. Любое решение будет оценено по достоинству.

ответ

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; 
    } 

} 
+0

Отличная помощница! спасибо большое, что сработало :) – fareed

+0

, а также я уверен, что вы использовали ttParent.getChildren() в рекурсивном методе. пожалуйста, исправьте это :) – fareed

+0

@fareed, пожалуйста, я отредактировал ответ с исправлением. приветствует – Damian

Смежные вопросы