Bonjour Messieurs,
Je souhaite avoir un coup de pouce pour afficher un menu dynamique sur ma page.
J'ai la liste des menus dans le controller
Dans la page Jsp j'ai:
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 model.addAttribute("user", getPrincipal()); List<Menu> menus = getUserMenu(); model.addAttribute("menus", menus);
le résultat est le suivant :
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 <ul id="menu"> <c:forEach var="menu1" items="${menus }"> <li><a href="#">${menu1.name}</a> <c:choose> <c:when test="${menu1.menus.size()==0}"> value vaut 0 (0) </c:when> <c:otherwise> value vaut ${menu1.menus.size()} (?) <ul> Iteraion menu Item <c:forEach var="menu2" items="${$menu1.menus}"> <c:out value="Menu Item nom : ${menu2.name} action : ${menu2.action}"/> <li><a href="#">${menu2.name}</a></li> </c:forEach> <c:forEach var = "i" begin = "1" end = "${menu1.menus.size()}"> <li><a href="#">${i}</a></li> </c:forEach> </ul> </c:otherwise> </c:choose>
Sur l'image on constate que c'est la boucle en gras ne s'est pas exécutée. C'est la boucle juste en dessous qui s'est exécute.
Pour info dans la console il affiche bien les sous menus
Code Java : 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 for (Menu m : allmenus) { //System.out.println("Menu : " + m.toString()); String[] roles = m.getRoles().stream().map(a -> a.getRole().getName()).toArray(String[]::new); /*for (String r : roles) { System.out.println("role Menu : " + r); }*/ /*for (String c : roles) { if ( Arrays.asList(authorities).contains(c) ) { boolean retval = usermenus.contains(m); if (retval == false) { usermenus.add(m); System.out.println(" ********************* menu user : " + m.toString() + "size :" + m.getMenus().size()); } } }*/ if (m.getMenus().size() > 0 ) { for (Menu m1 : m.getMenus()) { System.out.println("Menu : " + m.toString() + "Menu Item : " + m1.toString()); String[] roles1 = m1.getRoles().stream().map(a -> a.getRole().getName()).toArray(String[]::new); for (String r1 : roles1) { System.out.println("role Menu Item : " + r1); } /*for (String c : roles) { if ( Arrays.asList(authorities).contains(c) ) { boolean retval = usermenus.contains(m1); if (retval == false) { usermenus.add(m1); System.out.println(" ********************* menu user : " + m1.toString()); } } }*/ } } }
role Menu Item : ROLE_PUBLIC
Menu : Menu: 1, Session, null, trueMenu Item : Menu: 3, Modification de Mot de Passe, null, true
role Menu Item : ROLE_PUBLIC
Menu : Menu: 1, Session, null, trueMenu Item : Menu: 4, Messagerie, null, true
role Menu Item : ROLE_PUBLIC
Menu : Menu: 1, Session, null, trueMenu Item : Menu: 5, Gestion Utilisateur, null, true
role Menu Item : ROLE_PUBLIC
Menu : Menu: 1, Session, null, trueMenu Item : Menu: 10, Quitter, null, true
role Menu Item : ROLE_PUBLIC
Menu : Menu: 12, Menu 1, null, trueMenu Item : Menu: 14, Menu Item 1.1, null, true
role Menu Item : ROLE_USER
Menu : Menu: 12, Menu 1, null, trueMenu Item : Menu: 15, Menu Item 1.2, null, true
role Menu Item : ROLE_USER
Menu : Menu: 12, Menu 1, null, trueMenu Item : Menu: 16, Menu Item 1.3, null, true
role Menu Item : ROLE_USER
Menu : Menu: 13, Menu 2, null, trueMenu Item : Menu: 17, Menu Item 2.1, null, true
role Menu Item : ROLE_USER
Menu : Menu: 13, Menu 2, null, trueMenu Item : Menu: 18, Menu Item 2.2, null, true
role Menu Item : ROLE_USER
Menu : Menu: 20, Menu 4, null, trueMenu Item : Menu: 21, Menu Item 4.1, null, true
role Menu Item : ROLE_USER
Le problème c'est au niveau des lignes en gras. la boucle n'est pas exécutée.
j'ai rajouté la boucle après pour m'assurer que la liste des menus rattachés au menu principal n'est pas 0.
Partager