Existe-t-il un composant permettant de représenter un arbre ?
J'ai en fait des éléments à afficher, plus ou moins sous cette forme :
"
+ Element 1
fils1
fils2
+ Element 2
+ Element 3
fils1
"
Version imprimable
Existe-t-il un composant permettant de représenter un arbre ?
J'ai en fait des éléments à afficher, plus ou moins sous cette forme :
"
+ Element 1
fils1
fils2
+ Element 2
+ Element 3
fils1
"
il y a le composant tree2 de l'implémentation myFaces de JSF (http://myfaces.apache.org/).
Tu peux récupérer sur le site un .war de démonstration complet de l'ensemble des composants.
Il y a également Oracle ADF Faces Components avec notamment un arbre.
Il y a également WebGalileo Faces Components avec notamment un arbre.
PS: Oracle et l'équipe de Myfaces vont travailler en partenariat pour développer des composants JSF. :)
qu'est ce qu'un ".war" ?
un fichier war (Web ARchive) contient un application web (des JSP, des tags, des classes)
Pour continuer dans les questions de novices : ca s'ouvre avec koi ?
Tu le met dans le repertoire de deploiement de ton serveur d'application et il le deploie.
Sinon, tu peux l'ouvrir avec winRAR si tu en as envie.
Merci
J'essaye aussi de créer un tree2 mais je ne comprends pas comment l'arbre est créé? J'ai trouvé cet exemple mais sans trouver la classe treeBacker. Dois-je créer ma propre classe et comment dois-je créer mon arbre? Merci!
<t:tree2 id="clientTree" value="#{treeBacker.treeData}" var="node" varNodeToggler="t" showRootNode="false">
<f:facet name="person">
<h:panelGroup>
<f:facet name="expand">
<t:graphicImage value="/images/icons/space.gif" rendered="#{t.nodeExpanded}" border="0"/>
</f:facet>
<f:facet name="collapse">
<t:graphicImage value="/images/icons/space.gif" rendered="#{!t.nodeExpanded}" border="0"/>
</f:facet>
<h:outputText value="#{node.description}" styleClass="nodeFolder"/>
</h:panelGroup>
</f:facet>
Voici la classe TreeBacker qui correspond à l'example
(tu l'aura si tu télécharge les sources de myFaces 1.1.1)
Code:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183 /* * Copyright 2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.myfaces.examples.tree; import org.apache.myfaces.custom.tree2.HtmlTree; import org.apache.myfaces.custom.tree2.TreeNode; import org.apache.myfaces.custom.tree2.TreeNodeBase; import org.apache.myfaces.custom.tree2.TreeModel; import org.apache.myfaces.custom.tree2.TreeModelBase; import javax.faces.context.FacesContext; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.validator.ValidatorException; import javax.faces.event.ActionEvent; import java.io.Serializable; /** * Backer bean for use in example. Basically makes a TreeNode available. * * @author Sean Schofield * @version $Revision: 234267 $ $Date: 2005-08-21 12:55:19 -0400 (Sun, 21 Aug 2005) $ */ public class TreeBacker implements Serializable { private TreeModelBase _treeModel; private HtmlTree _tree; public TreeNode getTreeData() { TreeNode treeData = new TreeNodeBase("foo-folder", "Inbox", false); // construct a set of fake data (normally your data would come from a database) // populate Frank's portion of the tree TreeNodeBase personNode = new TreeNodeBase("person", "Frank Foo", false); personNode.getChildren().add(new TreeNodeBase("foo-folder", "Requires Foo", false)); TreeNodeBase folderNode = new TreeNodeBase("foo-folder", "Requires Foo Reviewer", false); folderNode.getChildren().add(new TreeNodeBase("document", "X050001", true)); folderNode.getChildren().add(new TreeNodeBase("document", "X050002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "X050003", true)); personNode.getChildren().add(folderNode); personNode.getChildren().add(new TreeNodeBase("foo-folder", "Requires Foo Recommendation", false)); folderNode = new TreeNodeBase("foo-folder", "Requires Foo Approval", false); folderNode.getChildren().add(new TreeNodeBase("document", "J050001", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J050002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J050003", true)); folderNode.getChildren().add(new TreeNodeBase("document", "E050011", true)); folderNode.getChildren().add(new TreeNodeBase("document", "R050002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "C050003", true)); personNode.getChildren().add(folderNode); folderNode = new TreeNodeBase("bar-folder", "Requires Bar Processing", false); folderNode.getChildren().add(new TreeNodeBase("document", "X050003", true)); folderNode.getChildren().add(new TreeNodeBase("document", "X050011", true)); folderNode.getChildren().add(new TreeNodeBase("document", "F050002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "G050003", true)); personNode.getChildren().add(folderNode); folderNode = new TreeNodeBase("bar-folder", "Requires Bar Approval", false); folderNode.getChildren().add(new TreeNodeBase("document", "J050006", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J050007", true)); personNode.getChildren().add(folderNode); treeData.getChildren().add(personNode); // populate Betty's portion of the tree personNode = new TreeNodeBase("person", "Betty Bar", false); personNode.getChildren().add(new TreeNodeBase("foo-folder", "Requires Foo", false)); folderNode = new TreeNodeBase("foo-folder", "Requires Foo Reviewer", false); folderNode.getChildren().add(new TreeNodeBase("document", "X012000", true)); folderNode.getChildren().add(new TreeNodeBase("document", "X013000", true)); folderNode.getChildren().add(new TreeNodeBase("document", "X014000", true)); personNode.getChildren().add(folderNode); folderNode = new TreeNodeBase("foo-folder", "Requires Foo Recommendation", false); folderNode.getChildren().add(new TreeNodeBase("document", "J010026", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J020002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J030103", true)); folderNode.getChildren().add(new TreeNodeBase("document", "E030214", true)); folderNode.getChildren().add(new TreeNodeBase("document", "R020444", true)); folderNode.getChildren().add(new TreeNodeBase("document", "C010000", true)); personNode.getChildren().add(folderNode); personNode.getChildren().add(new TreeNodeBase("foo-folder", "Requires Foo Approval", false)); folderNode = new TreeNodeBase("bar-folder", "Requires Bar Processing", false); folderNode.getChildren().add(new TreeNodeBase("document", "T052003", true)); folderNode.getChildren().add(new TreeNodeBase("document", "T020011", true)); personNode.getChildren().add(folderNode); folderNode = new TreeNodeBase("bar-folder", "Requires Bar Approval", false); folderNode.getChildren().add(new TreeNodeBase("document", "J010002", true)); folderNode.getChildren().add(new TreeNodeBase("document", "J030047", true)); folderNode.getChildren().add(new TreeNodeBase("document", "F030112", true)); personNode.getChildren().add(folderNode); treeData.getChildren().add(personNode); return treeData; } /** * NOTE: This is just to show an alternative way of supplying tree data. You can supply either a * TreeModel or TreeNode. * * @return TreeModel */ public TreeModel getExpandedTreeData() { return new TreeModelBase(getTreeData()); } public void setTree(HtmlTree tree) { _tree = tree; } public HtmlTree getTree() { return _tree; } public String expandAll() { _tree.expandAll(); return null; } private String _nodePath; public void setNodePath(String nodePath) { _nodePath = nodePath; } public String getNodePath() { return _nodePath; } public void checkPath(FacesContext context, UIComponent component, java.lang.Object value) { // make sure path is valid (leaves cannot be expanded or renderer will complain) FacesMessage message = null; String[] path = _tree.getPathInformation(value.toString()); for (int i = 0; i < path.length; i++) { String nodeId = path[i]; try { _tree.setNodeId(nodeId); } catch (Exception e) { throw new ValidatorException(message, e); } if (_tree.getNode().isLeaf()) { message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid node path (cannot expand a leaf): " + nodeId, "Invalid node path (cannot expand a leaf): " + nodeId); throw new ValidatorException(message); } } } public void expandPath(ActionEvent event) { _tree.expandPath(_tree.getPathInformation(_nodePath)); } }
Merci beaucoup pour ton secours!:)
Pour l'utiliser et inclure ces fichiers et tomahawk dans ma page jsp:
import org.apache.myfaces.custom.tree2.HtmlTree;
import org.apache.myfaces.custom.tree2.TreeNode;
import org.apache.myfaces.custom.tree2.TreeNodeBase;
import org.apache.myfaces.custom.tree2.TreeModel;
import org.apache.myfaces.custom.tree2.TreeModelBase;
Est-ce qu'il faut que je rajoute quelque chose dans mon web.xml une servlet ou autre?
Est-ce qu'apres il est possible d'ajouter un actionListener sur chaque élément de l'arbre? Quand je clique sur un element j'ouvre une autre page.
Merci encore
Citation:
Pour l'utiliser et inclure ces fichiers et tomahawk dans ma page jsp:
import org.apache.myfaces.custom.tree2.HtmlTree;
import org.apache.myfaces.custom.tree2.TreeNode;
import org.apache.myfaces.custom.tree2.TreeNodeBase;
import org.apache.myfaces.custom.tree2.TreeModel;
import org.apache.myfaces.custom.tree2.TreeModelBase;
Vu les questions, peut être un tutorial ou un livre sur jsf serai bienvenu, ce serait trop long à tout expliquerCitation:
Est-ce qu'il faut que je rajoute quelque chose dans mon web.xml une servlet ou autre?
Tu peux déjà telecharger les exemple de myFaces (les sources),
essayer de faire tourner l'exemple et de le modifier
http://myfaces.apache.org/download.html
Merci pour les conseils. Je n'ai pas beaucoup de temps pour apprendre... Est-ce que tu pourrais m'indiquer l'exemple qui correspond a mes besoins a savoir pouvoir cliquer sur un item de l'arbre et declencher un actionListener? Parce que j'ai deja essayé tree.jsp depuis mon environnement mais j'avais des problemes de faces config... surement du a quelque chose de manquant dans mon web.xml enfin je pense..
Je suppose qu'il n'est pas non plus possible d'utiliser un JTree dans une page jsp?
Merci encore