treeview

Le tag treeview affiche un composant treeview standard. Les noeuds sont ouverts et fermés grâce à DHTML. Le contenu du treeview peut être défini en plaçant dans ce tag des tags menuItem, ou en mettant l'attribut name à la valeur du nom du menu dans le repository des menus.

Des cookies sont utilisés pour mémoriser quels noeuds du treeview sont ouverts et fermés. Cela rend impossible la définition avec les tags menuItem de deux treeviews différents dans une même page. Cependant, il est possible de placer plusieurs treeviews s'ils sont définis dans le repository des menus.

Si le contenu du treeview est défini dans le repository des menus et si ce contenu est suffisamment important (au moins 50 éléments par défaut), uniquement les noeuds principaux seront chargés. Une requête sera automatiquement effectuée côté serveur via l'action struts-layout '/treeview' afin de charger les autres noeuds si nécessaires. L'action du treeview doit être définie dans le fichier struts-config.xml avec les attributs suivants :

  • path="/treeview"
  • type="fr.improve.struts.taglib.layout.treeview.TreeviewAction"

Si une image est associée à un élément ayant des sous-éléments, cliquer sur l'image ouvrira ou fermera tous ces sous-éléments.

Le treeview ne supporte pas l'attribut action des tags menuItem et des objets MenuComponent.

Attributs

Nom de l'attribut Description
align -
autoIncrement Si cet attribut vaut false, la styleClass n'est pas incrémentée à chaque fois qu'un sous-noeud est affiché.
bundle -
expandedLevelsAtFirst Profondeur des noeuds à du menu à ouvrir initialement.
name Nom du menu dans le repository des menus à afficher sous la forme d'un treeview.
styleClass

Nom de la classe du style CSS à utiliser.

Si l'attribut autoIncrement ne vaut pas false, un entier représentant la profondeur du noe est ajouté après la valeur spécifiée, ce qui permet d'utiliser différentes classes pour différents niveaux de noeuds.

L'attribut styleClass est aussi utilisé dans le tag TD qui permet de générer l'étiquette du noeud et dans le tag A qui permet de générer les liens.

width -

Exemples

Contenu du treeview défini dans les pages JSP :

					<layout:treeview>
					<layout:menuItem key="treeview.menu1" link="link1.html"/>
					<layout:menuItem key="treeview.menu2">
						<layout:menuItem key="treeview.menu2.submenu1">
							<layout:menuItem key="treeview.menu2.submenu1.item1" link="link2.html"/>
							<layout:menuItem key="treeview.menu2.submenu1.item1" link="link3.html"/>
						</layout:menuItem>
						<layout:menuItem key="treeview.menu2.submenu2" link="link3.html"/>
						<layout:menuItem key="treeview.menu2.submenu3" link="link4.html"/>		
					</layout:menuItem>
					</layout:treeview>
				

Contenu du treeview défini dans le repository des menus pour un utilisateur. Le contenu du treeview est créé dans une action :

					dans l'action :
					public ActionForward perform(...) {
					...
					MenuComponent lc_menu1 = new MenuComponent();
					lc_menu1.setName("java");
					MenuComponent lc_menu11 = new MenuComponent();
					lc_menu11.setTitle("Java");
					MenuComponent lc_menu111 = new MenuComponent();
					lc_menu111.setTitle("Sun");
					lc_menu111.setLocation("http://java.sun.com");
					lc_menu11.addMenuComponent(lc_menu111);
					MenuComponent lc_menu112 = new MenuComponent();
					lc_menu111.setTitle("Eclipse");
					lc_menu111.setLocation("http://www.eclipse.org");
					lc_menu11.addMenuComponent(lc_menu112);
					lc_menu1.addMenuComponent(lc_menu11);
					...
					((MenuRepository)in_request.getSession().getAttribute(MenuRepository.MENU_REPOSITORY_KEY)).addMenu(lc_menu1);
					
					dans la page JSP :
					<layout:treeview name="java"/>
				

Exemple en ligne :

struts-layout est livré avec un exemple exécutable d'un composant treeview incluant les exemples précédents. L'exemple contient une action (fr.improve.struts.webapp.layout.example.treeview.TreeviewAction) qui définit un treeview, et une page jsp (/struts-layout/examples/treeview.jsp) affichant deux treeviews. Il peut être lancé en invoquant l'action /examples/treeview.do.