Quicklinks

Tags : menuItem - menu - dynMenu

Introduction

Struts-layout permet de définir des menus arborescents et de menus déroulants. Les menus peuvent être définis :

  • Dans les classes Action, puis stockés dans le contexte session, s'il sera réutilisé ou modifié
  • Dans les JSP, grâce aux tags menu
  • Dans un fichier XML

Définir un menu dans une classe Action

Les menus de struts-layout utilisent le framework écrit par Scott Sayles (qui peut être téléchargé ici) et sont définis dans les classes Action ainsi :

  • Un menu doit être composé de MenuComponent
  • Un menu doit être placé dans le MenuRepository

LayoutUtils propose deux méthodes permettant d'accéder au repository : addMenu(MenuComponent) et getMenu(String menuName)

Définir un menu dans une page JSP

Le tag <layout:menuItem> peut être utilisé dans un tag menu pour définir le menu à afficher.

Exemple :

					<layout:menuItem key="menu.test.menu1" link="link1.html"/>
						<layout:menuItem key="menu.test.menu2">
							<layout:menuItem key="menu.test.item1" link="link2.html"/>
							<layout:menuItem key="menu.test.item2" link="link3.html"/>
						</layout:menuItem>	
						<layout:menuItem key="menu.test.menu3">
							<layout:menuItem key="menu.test.menu4">
								<layout:menuItem key="menu.test.item3" link="link4.html"/>
								<layout:menuItem key="menu.test.item4" link="link5.html"/>
							</layout:menuItem>
							<layout:menuItem key="menu.test.item5" link="link6.html"/>
						</layout:menuItem>
					<layout:menuItem key="menu.test.menu5" link="link7.html"/>
				

Il s'agit là d'un menu arborescent. L'exemple plus bas montre comment définir un menu déroulant.

Définir un menu dans un fichier XML

Comme dans le framework de Scott

Afficher un menu arborescent

Le tag <layout:menu> affichelemenu spécifié sous la forme d'un menu arborescent. Avec IE5 ou NS6 il est possible d'uvrir/fermer les noeuds. L'état des noeuds est sauvegardé grâce à des cookies. Par exemple :

				<layout:menu styleClass="FORM" align="left">
					<layout:menuItem key="menu.test.menu1" link="link1.html"/>
					<layout:menuItem key="menu.test.menu2">
						<layout:menuItem key="menu.test.item1" link="link2.html"/>
						<layout:menuItem key="menu.test.item2" link="link3.html"/>
					</layout:menuItem>	
					<layout:menuItem key="menu.test.menu3">
						<layout:menuItem key="menu.test.menu4">
							<layout:menuItem key="menu.test.item3" link="link4.html"/>
							<layout:menuItem key="menu.test.item4" link="link5.html"/>
						</layout:menuItem>
						<layout:menuItem key="menu.test.item5" link="link6.html"/>
					</layout:menuItem>
					<layout:menuItem key="menu.test.menu5" link="link7.html"/>
				</layout:menu>
			

Résultat :

Afficher un menu déroulant

Le tag <layout:dynMenu> affiche le menu spécifié sous la forme d'un menu déroulant. Le JavaScript utilisé est HierMenus 4.0.7 (http://www.webreference.com/dhtml/column50/), qui fonctionne avec presque tous les navigateurs. Notez bien que la version distribuée avec struts-layout est une ancienne version. Les versions plus récentes n'ont pas été testées avec struts-layout et requièrent une licence. En voici un exemple d'utilisation :

				<layout:dynMenu config="fr.improve.struts.webapp.layout.example.Mainmenu" left="100" top="150">
					<layout:menuItem key="menu.test.menu1" link="link1.html"/>
					<layout:menuItem key="menu.test.menu2">
						<layout:menuItem key="menu.test.item1" link="link2.html"/>
						<layout:menuItem key="menu.test.item2" link="link3.html"/>
					</layout:menuItem>	
					<layout:menuItem key="menu.test.menu3">
						<layout:menuItem key="menu.test.menu4">
							<layout:menuItem key="menu.test.item3" link="link4.html"/>
							<layout:menuItem key="menu.test.item4" link="link5.html"/>
						</layout:menuItem>
						<layout:menuItem key="menu.test.item5" link="link6.html"/>
					</layout:menuItem>
					<layout:menuItem key="menu.test.menu5" link="link7.html"/>
				</layout:dynMenu>
			

Et en voici le résultat :

Contenu du fichier de configuration du dynMenu par défaut :

				width=100
				font_color="#D1D3FD"
				mouseover_font_color="#FFFFFF"
				background_color="#336699"
				mouseover_background_color="#274465"
				border_color="#000000"
				separator_color="#000000"
				top_is_permanent=1
				top_is_horizontal=1
				tree_is_horizontal=0
				position_under=1
				top_more_images_visible=0
				tree_more_images_visible=1
				evaluate_upon_tree_show="null"
				evaluate_upon_tree_hide="null"
			

Il est également possible de spécifier les positions par défaut à gauche et en haut en spécifiant les propriétés 'left_position' et 'top_position'.

Pour plus d'informations à au sujet de ces propriétés, reportez-vous à la documentation de HierMenus.

Il est possible d'utiliser différents fichiers de configuration en fonction du skin sélectionné. Par exemple, s'il y a skin1.css et skin2.css, les noms des fichiers de propriétés peuvent être menu1_skin1.properties et menu1_skin2.properties. La valeur de l'attribut config serait alors "menu1".

Note :

  • Actuellement, les menus struts-layout sont compatibles avec le modèle de menus de Scott (repository & MenuComponent) mais non avec l'afficheur de menus.
  • Le contrôleur de servlet de Scott doit être utilisé afin de charger le repository. Si les menus sont statiques et définis dans les pages JSP, l'ActionServlet standard de Struts peut être utilisée.
  • Le code JavaScript utilisé par les menus est inclus par le tag <layout:html>. Si ce tage n'est pas utilisé, le fichier config/javascript.js doit être inclus avant toute utilisation des menus arborescents et le fichier config/HM_Loader.js doit être inclus à la fin de la page.

menuItem

Ajoute un élément dans un menu.

Ce tag doit être placé dans un autre tag menuItem, dans un tag menu ou dans un tag dynMenu.

Les attributs key et link peuvent être utilisés pour créer un nouvel élément d'un menu. Il est également possible de récupérer un menu du repository de Scott Sayles gràce à l'attribut repository.

Attributs

Nom de l'attribut Description
forward -
image -
key La clé du message de l'élément.
link L'URL à invoquer lorsque cet élément est sélectionné.
action L'action Struts à invoquer lorsque cet élément est sélectionné.
name Nom du menu dans le repository des menus.
page -
style Style CSS de l'élément.
target -

menu

Affiche un menu sous forme de menu arborescent.

Le contenu du menu est spécifié par les tags menuItem placés dans ce tag.

Attributs

Nom de l'attribut Description
align -
bundle Nom du bundle à utiliser pour récupérer les étiquettes des éléments.
styleClass Classe du style CSS à utiliser pour afficher le menu.
width -

dynMenu

Affiche un menu sous la forme d'un menu déroulant.

Le contenu du menu est spécifié par les tags menuItem placés dans ce tag.

Attributs

Nom de l'attribut Description
align -
bundle -
config Nom du fichier de propriétés contenant la configuration du menu.
includeScript Si cet attribut vaut true, charge HM_Loader.js (requis pour afficher le menu). Automatiquement effectué si le tag <layout:html> est utilisé.
left Position gauche du menu, en pixels. Une valeur poar défaut peut être spécifiée dans le fichier de propriétés.
styleClass Classe du style CSS à utiliser pour afficher le menu.
top Position haut du menu, en pixels. Une valeur poar défaut peut être spécifiée dans le fichier de propriétés.
width -