Bonjour,

Voila je souhaite afficher un arbre à partir de données présentes dans une table.
Actuellement j'y arrive sur un arbre très simple (un seul noeud avec des feuilles).
Ce que je souhaite c'est affectivement avoir une arborescence complète.
J'utilise richfaces 4.0, jsf 2.0, jboss 6 et eclipse helios

Voici la structure de la table (batiment) en question :
La colonne pere permet d'indiquer l'id du parent

ce que j'ai actuellement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
ecole
administratif
culte
sport
ferry
hotel de ville
Ce que je souhaite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
ecole
        ferry
administratif
        hotel de ville
culte
sport
Mon bean métier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
package com.galhauban.patrimoine.batiment;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
 
@Stateless(name="refItemBean")
@Local(com.galhauban.patrimoine.batiment.RefItemLocal.class)
public class RefItemBean implements RefItemLocal,Serializable {
	public EntityManager getEm() {
		return em;
	}
 
	public void setEm(EntityManager em) {
		this.em = em;
	}
 
 
	@PersistenceContext (unitName = "EJB-Patrimoine", name = "EJB-Patrimoine")
	private EntityManager em;
	private RefItemEntity item;
	private static final long serialVersionUID = 1L;
	private List<RefItemEntity> items;
	public RefItemBean(){};
 
	public List<RefItemEntity> getItems() {
		return items;
	}
 
	public void setItems(List<RefItemEntity> items) {
		this.items = items;
	}
 
	public RefItemEntity getItem() {
		return item;
	}
 
	public void setItem(RefItemEntity item) {
		this.item = item;
	}
 
 
	public List<RefItemEntity> refItemList(){
		try {
			System.out.println("*** Entre dans RefItemBean ");
			Query query = em.createQuery("select b1 from RefItemEntity b1");
 
			List<RefItemEntity> items = (List<RefItemEntity>) query.getResultList();
			System.out.println("*** Nb element : "+items.size());
			return items;
		}
		catch (Exception e) {
			System.out.println("Voir pb: " + e.getMessage());
			return null;
		}
	}
 
}
Son interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
package com.galhauban.patrimoine.batiment;
 
import java.util.List;
 
import javax.ejb.Local;
 
@Local
public interface RefItemLocal {
	public List<RefItemEntity> refItemList();
}
Mon managedbean :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
package com.galhauban.patrimoine.batiment;
 
 
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
 
 
@ManagedBean(name="refItemController")
@SessionScoped
public class RefItemController implements Serializable {
 
	private static final long serialVersionUID = 1L;
	@EJB
	private RefItemLocal items;
	private List<RefItemEntity>  liste;
	private Tree myTree = new Tree();
	private Tree myNodes = new Tree();
 
	public RefItemController(){};
 
	public List<RefItemEntity> getListe() {
		return liste;
	}
 
	public void setListe(List<RefItemEntity> liste) {
		this.liste = liste;
	}
 
	public RefItemLocal getItems() {
		return items;
	}
 
	public void setItems(RefItemLocal items) {
		this.items = items;
	}
 
	public Tree getMyTree() {
		return myTree;
	}
 
	public void setMyTree(Tree myTree) {
		this.myTree = myTree;
	}
 
	public Tree getMyNodes() {
		return myNodes;
	}
 
	public void setMyNodes(Tree myNodes) {
		this.myNodes = myNodes;
	}
 
	public String doSearch() {
		try {
	        liste = items.refItemList();
	        System.out.println("*** Liste taille : " + liste.size());
 
	        myNodes.setName("root");
	        myTree.addChild(0, myNodes);
 
	        for (RefItemEntity objet : liste){
	      		Tree child = new Tree();
	            child.setName(objet.getNom());
	            myNodes.addChild(objet.getId(), child);
	    	}
 
			return "referentiel.found";
		}
		catch (Exception ex){
			System.out.println("pb : " + ex.getMessage());
			ex.printStackTrace();
			return null;
		}
 
	}
}
Ma classe tree :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
package com.galhauban.patrimoine.batiment;
 
import org.richfaces.model.TreeNodeImpl;
 
public class Tree extends TreeNodeImpl{
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String toString() {
        return this.name;
    }
}
Mon fichier xhtml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"> 
 
<h:head></h:head> 
<body>
    <rich:panel>
        <f:facet name="header">
        Write your own custom rich components with built-in AJAX support
        </f:facet>
    <h:form>
         <rich:tree value="#{refItemController.myTree}" var="station" toggleType="client" >
			   <rich:treeNode >
			      <h:outputText value="#{station}" />
			   </rich:treeNode>
 
			</rich:tree> 
    </h:form>
	</rich:panel>
</body> 
</html>

Voila j'aurais aimé savoir ce que je devrais changer, ajouter pour obtenir l'arborescence souhaitée.

Merci par avance
Couse1