IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Struts-Layout] Création Menu automatique


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut [Struts-Layout] Création Menu automatique
    Bonjour,
    Je cherche a faire un menu avec struts layout automatique un peu à la manière du treeview via la balise <layout:treeview name="java"/>

    Quelqu'un pourrais m'aider car je ne sais pas si je dois utiliser la même méthode que pour le treeview en déclarant une classe Action.
    Déjà est-ce possible car le layout:menu ne possède pas d'attribut name.

    Faut-il passé par le bundle? Comment?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut
    J'ai réussi a faire un pseudo affichage avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <layout:menu styleClass="FORM" align="left">
    	<layout:menuItem name="java"/>
    </layout:menu>
    Cependant la hierrarchie n'est pas conservée comme avec le treeview ca me fait un truc tout cracra.

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    J'ai fait le test et l'ordre est bien respecté comme avec le tag layout:treeview.
    Je ne vois donc pas pourquoi ce n'est pas le cas pour toi.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut
    Salut c_nvy,

    J'ai trouvé une solution provisoire pour mon problème je la poste ci-dessous j'aimerais beaucoup avoir votre avis sur cette solution.

    Voici ma classe pour construire le menu:

    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
    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
     
    package tools;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    import fr.improve.struts.taglib.layout.menu.MenuComponent;
    //import fr.improve.struts.taglib.layout.menu.MenuRepository;
    import fr.improve.struts.taglib.layout.util.LayoutUtils;
     
    public class MenuTree extends Action{
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest req, HttpServletResponse rep) throws Exception {
    		//MenuComponent lc_menu1 = new MenuComponent();
    		//lc_menu1.setTitle("Racine");
    		//lc_menu1.setName("java");
     
    		//Ajout d'une rubrique
    		MenuComponent lc_menu11 = new MenuComponent();
    		System.out.println("ICI C L'ACTION :"+lc_menu11.getAction());
    		lc_menu11.setTitle("Java");
    		lc_menu11.setName("java");
    			//Ajout d'une sous rubrique
    			MenuComponent lc_menu111 = new MenuComponent();
    			lc_menu111.setTitle("Sun");
    			lc_menu111.setName("sun");
    			lc_menu111.setLocation("http://java.sun.com");
    			lc_menu11.addMenuComponent(lc_menu111);
     
    			//ajout d'une seconde sous rubrique	
    			MenuComponent lc_menu112 = new MenuComponent();
    			lc_menu112.setTitle("Eclipse");
    			lc_menu112.setName("eclipse");
    			//lc_menu112.setLocation("http://www.eclipse.org");
    			lc_menu11.addMenuComponent(lc_menu112);
     
    				//ajout d'une sous sous rubrique
    				MenuComponent sousMenu = new MenuComponent();
    				sousMenu.setTitle("sousRubrique");
    				sousMenu.setLocation("sousRubrique.jsp");
    				lc_menu112.addMenuComponent(sousMenu);
    		//lc_menu1.addMenuComponent(lc_menu11);
    		LayoutUtils.addMenuIntoSession(req, lc_menu11);		
    		//Ajout d'une seconde rubrique
    		MenuComponent lc_menu12 = new MenuComponent();
    		lc_menu12.setTitle("C++");
    		lc_menu12.setName("C++");
    		lc_menu12.setLocation("C++.fr");
    		//lc_menu1.addMenuComponent(lc_menu12);
    		LayoutUtils.addMenuIntoSession(req, lc_menu12);
    		// Ajout d'une troisieme rubrique
    		MenuComponent lc_menu13 = new MenuComponent();
    		lc_menu13.setTitle("Python");
    		lc_menu13.setName("python");
    		lc_menu13.setLocation("python.fr");
    		//lc_menu1.addMenuComponent(lc_menu13);
     
    		LayoutUtils.addMenuIntoSession(req, lc_menu13);
    		return mapping.findForward("ok");
    	}
     
    }//fin classe

    genMenu.jsp
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
     
    <html:html>
    	<head>
    		<title>test</title>
    		<meta http-equiv="Content-type" content="text/html; charset=utf-8">
    		<layout:skin includeScript="true"/>
    		<html:base/>
    	</head>
    	<body>
    	<br><br>
    		<table>
    		<tr>
    			<td>
    				<!-- Création d un menu traditionnel -->
    				<layout:menu styleClass="FORM" align="left">
    					<layout:menuItem key="menu.test.menu1">
    						<layout:menuItem key="menu.test.item1" link="link2.html"/>
    						<layout:menuItem key="menu.test.item2">
    							<layout:menuItem key="menu.test.item3" link="link5.html"/>
    						</layout:menuItem>
    					</layout:menuItem>						
    					<layout:menuItem key="menu.test.menu2" link="link7.html"/>
    					<layout:menuItem key="menu.test.menu3" link="link7.html"/>
    				</layout:menu>
    			</td>
    			<td>
    				<!-- Génération du même menu en passant par une class Java -->
    				<layout:menu styleClass="FORM">
    					<layout:menuItem name="java"/>
    					<layout:menuItem name="C++"/>
    					<layout:menuItem name="python"/>
    				</layout:menu>
    			</td>
    		</tr>
    		</table>		
    	</body>
    </html>

    Comme tu peut le voire j'ai du rusé quant à la construction du menu et partir sur une solution différente que pour un treeview. En gros au lieu de tout ratacher au noeud racine de nom java j'ai fais un addMenuIntoSession(..) pour chaque rubrique. Pourquoi avoir fait ca? Car si on réutilise le même code de création de menu que celui du treeview j'obtenais un menu décalé dont toutes les rubriques étaient ratachées à un noeud racine qui avait pour valeur null.
    Au final, j'obtiens le génération d'un menu qui est identique à celui d'une construction traditionnelle.
    Maintenant est ce que cette solution est la plus propre et la plus optimal, là est la question! Quand pensez vous? Existe t-il une autre façon de faire?

    Maintenant, je rajoute une couche par dessus. Je veux générer mon menu à partir d'un fichier XML. Le problème c'est qu'au niveau de l'affichage il prend obligatoirement les valeurs qu'on doit définir dans le fichier de properties.
    Pas cool pour moi qui veut faire ca à partir d'un doc XML.
    Quand je regarde la syntaxe je vois une donnée membre Action action dans la classe MenuBase de l'API struts layout. Je me dis que la solution à mon problème est peut être par là néanmoins comment faire et est ce que c'est ca ... Donc encore une question : Qui qui qu'a déjà rencontré ca et qui a trouvé comment faire car ca m'arrangerais beaucoup qui me le dise car c'est un peu la prise de tête ...

    Merci

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut
    J'ai une solution provisoire un peu pourri qui consiste à ouvrir le fichier de propriété en écriture puis de traiter le doc XML et donc d'injecter dans le fichier de propriété les données. Maintenant, je trouve ca super nul car ca inclut de la redondance et pas génial dans le cas de modification du fichier XML.
    Y a pas un moyen de s'abstraire des fichiers de propriétés et d'utiliser ma classe qui traite mon arbreXML à la place?

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Par défaut
    Yahooooooo !
    Je suis tombé en fouinant sur ta discussion concernant un treeview :
    http://www.developpez.net/forums/sho...d.php?t=202912

    J'ai utilisé ta méthode et ca m'a permit de désactiver l'accès aux resources.
    Je peux donc implémenter ma solution avec de l'XML derrière ce que je vais m'empressé de réaliser.

    Sinon ma question concernant la propreté de ma solution décrite ci-dessus reste d'actualité.

Discussions similaires

  1. [Struts-Layout] Paramétrage du menu
    Par titaaa dans le forum Struts 1
    Réponses: 3
    Dernier message: 20/05/2007, 23h15
  2. struts menu (struts-layout ou struts menu) ?
    Par khaledirb7 dans le forum Struts 1
    Réponses: 1
    Dernier message: 02/03/2007, 19h46
  3. [PHP-JS] Création menu déroulant automatique
    Par calitom dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 10h18
  4. [struts layout]menu et menuItem
    Par david06600 dans le forum Struts 1
    Réponses: 3
    Dernier message: 11/09/2006, 16h22
  5. [struts layout] menu
    Par agougeon dans le forum Struts 1
    Réponses: 9
    Dernier message: 21/02/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo