Struts-layout permet de définir des menus arborescents et de menus déroulants. Les menus peuvent être définis :
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 :
LayoutUtils propose deux méthodes permettant d'accéder au repository : addMenu(MenuComponent) et getMenu(String menuName)
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.
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 :

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 :
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.
| 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 | - |
Affiche un menu sous forme de menu arborescent.
Le contenu du menu est spécifié par les tags menuItem placés dans ce tag.
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.
| 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 | - |