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 :

Comment faire fonctionner Struts-Layout ?


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut Comment faire fonctionner Struts-Layout ?
    salut tous le monde
    je suis entrain de réaliser une application web avec struts et je veux utilser un menu à onglet et un menu arboréssant dynamique (le nombre d'Item ainsi que leurs propriétés soit parametrable selon des privilege de user récupéré d'une bdd)
    grace à votre aide (cette excelent forum) j'ai réussi à faire foctionner struts-menu mais ce dérnier ne répond pas tout à fait à mon besoin puisque les menuItem d'un menu se trouve figé dans menu-config.xml et toute modification de ce fichier.xml nécessite de redéployé l'application. c'est pour cela que je veut passer à struts-layout mais la doc officiel n'est pas vraiment claire donc j'ai quelque questions :
    1) est ce qu'il ya deux possibilité d'utiliser un menu dans struts layout
    - le construire dans une jsp
    - le construire dans une action et faire un simple appel dans la jsp et c'est la solution qui m'intéressent
    2) est ce que vous pouvez m'éclairer comment mettre en oeuvre struts layout
    c'est à dire :
    -ou mettre les fichier .jar (est c'est comme struts-menu)
    - ou mettre les tld
    - qu'est ce qu'il faut mettre dans la jsp
    - qu'est qu'un repository de menu ?
    bref comment le faire fonctionner

    merci d'avance.

  2. #2
    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
    Tu peux effectivement constituer le treeview dans l'Action et faire un simple appel dans la jsp.
    Tu as un exemple dans cette discussion.

    Sinon, pour la mise en oeuvre, il faut suivre les instructions d'installation décrites ici.

    Et dans la jsp, ne pas oublier d'inclure le javascript de Struts-Layout en ajoutant le tag layout:skin dans la balise <head> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<layout:skin includeScript="true"/>

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    merci c_nvy pour votre aide
    je n'est pas encore réussi à faire fonctionner struts layout.
    * je vais décrire toute mes étape :
    1)j'ai copier struts-layout.jar dans le répertoire lib
    2)j'ai ajouter les répertoire images et config dans webRoot
    3)j'ai ajouter le pluguin suivant dans struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <plug-in className="fr.improve.struts.taglib.layout.workflow.LayoutPlugin"/>
    4) j'ai mis struts-layout.tld dans web-inf

    * et dans ma page jsp :

    1) j'ai importé le tag layout de deux façon et je ne sait pas laquel est bonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ taglib uri="http://struts.application-servers.com/layout" prefix="layout" %>
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
    2) j'ai ajouter le skin dans la partie head
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <layout:skin includeScript="true"/>
    4)
    * et voici ma page jsp qui contient le tree wiew
    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
     
    <html:html >
      <head>
        <html:base />
     
        <title>kh.jsp</title>
     
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
         <layout:skin includeScript="true"/>
      </head>
     
      <body>
     
    <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>
     
      </body>
    </html:html>
    et pour le fichier .propertie
    j'ai deux fichier l'un et déclaré dans struts-config comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <message-resources parameter="com.khMenu.struts.ApplicationResources" />
    et l'autre qui porte le nom struts-layout je l'ai tout simplement mis dans web-inf/classes sans le déclarer dans struts-menu.xml est ce qu'il faut l'ajouter dans struts config.xml et comment faire appel à ce fichier dans ma jsp par l'attribut bundlle ?
    en tous cas j'ai mis dans les 2 fichier .properties le contenu suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    directory.images = config
    directory.config = config
    #pour les libellé du treeview
    treeview.menu1 = kh1
    treeview.menu2 = kh2
    treeview.menu2.submenu1 = kh11
    treeview.menu2.submenu1.item1 = kh111
    treeview.menu2.submenu2 = kh12
    treeview.menu2.submenu3 = kh13
    des que j'appel la page le browser m'affiche l'erreus suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    exception 
    javax.servlet.ServletException: org/apache/struts/taglib/TagUtils
    ........
    cause mère
    java.lang.NoClassDefFoundError: org/apache/struts/taglib/TagUtils
    .......................
    une autre question si je construit mon treewiew dans une action ,est ce que cette action devrra etre celle qui appelera la page jsp qui contient le treeview



    si quelqu'un peut m'aider je serait vraiment reconnaissant

  4. #4
    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
    java.lang.NoClassDefFoundError: org/apache/struts/taglib/TagUtils
    La classe TagUtils est dans le jar de Struts.
    Quelles versions de Struts et de Struts-Layout utilises-tu ?

  5. #5
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    Merci c_nvy effectivement il s’agissait d’un problème de version puisque lorsque j’ai ajouté le fichier « Struts-Layout-1.2-Struts-1.1-compatibility.jar » le problème était résolu.
    Vous venez de me le confirmer. Sans faire attention j’ai utilisé struts1.1 au lieu de struts1.2 ; lorsque j’ai ajouté le .jar ci dessus j’ai résolu le pb sans comprendre comment merci pou l’éclairassent.
    Il me reste comme même un problème il s’agit des fichiers .properties
    Mon application n’arrive pas à détecter le fichier Struts-layout_default.properties j’ai réussi à afficher les messages de ce fichier et je n’arrive pas à afficher les petite image.png du treeview je suppose que c’est dans ce fichier qu’on précise les deux directories

    directory.images = images

    directory.config = config

    le fichier Struts-layout_default.properties je l’ai copier tel quel a partir de strutsLayout.zip que j’ai téléchargé il contient plusieurs couple/valeur que j’ai laisser tel quel

    merci d’avance

  6. #6
    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
    Si les images du treeview (les gifs de préfixe tree) sont bien dans le répertoire images, il faut bien coder ceci dans Struts-Layout_default.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    directory.images = images
    directory.config = config
    Tu n'as effectivement pas besoin de modifier les autres associations clés/valeurs.
    Ce fichier doit être sous WEB-INF/classes et il n'y a aucune déclaration à faire dans le struts-config.xml concernant ce fichier.
    Les libellés du treeview ne doivent pas être codés dans ce fichier mais plutôt dans le fichier ApplicationResources.properties.

  7. #7
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    merci c_nvy pour votre aide qui m'a été précieuse
    j'ai enfin réussi à afficher mon treewiew de deux façons (en le construisant dans la jsp ou dans l'action )
    mais j'ai comme meme un probleme lorsque je redeploi mon application la fenetre consol de mon éditeur MyEclipse m'affiche les exception suivane:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INFO: Impossible de sérialiser l'attribut de session fr.improve.struts.taglib.layout.TreeviewTag.TREEVIEW_NUMBER pour la session 3ED37C694C93CDC23D243D7B17774AAE
    java.io.NotSerializableException: org.apache.jasper.runtime.PageContextImpl
    ..................
    .................
    GRAVE: "IOException" lors du chargement des sessions persistantes: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.jasper.runtime.PageContextImpl
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.jasper.runtime.PageContextImpl
    .............
    ............
    GRAVE: Exception au chargement des sessions depuis le stockage persistant (persistent storage)
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.jasper.runtime.PageContextImpl
    est ce que vous pouvez mz dire comment y remédier

  8. #8
    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
    Peux-tu montrer comment tu mets le treeview en session dans l'Action ?

  9. #9
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    merci c_nvy d'être toujours à l'aide des autres

    voici la partie de mon action dans laquel je met mon menu dans la cession
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ....................
    MenuRepository rep = new MenuRepository();
    	rep.setName("html");
            rep.addMenu(menu1); 
    		  request.getSession().setAttribute(MenuRepository.MENU_REPOSITORY_KEY,rep);
    ..........................
    et dans cette action j'importe seulement ce package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import fr.improve.struts.taglib.layout.menu.*;
    est ce que vous pouver m'expliquer qu'est ce qu'un MenuRepository ;j'ai vu dans un code source sur ce forum qu'on faisait un teste sur la presence ou nom d'un objet MenuRepository dans la session avant de créer un nouveau en quoi cela est util
    merci encore

  10. #10
    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
    Peux-tu faire un test en remplaçant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MenuRepository rep = new MenuRepository();
    rep.setName("html");
    rep.addMenu(menu1); 
    request.getSession().setAttribute(MenuRepository.MENU_REPOSITORY_KEY,rep);
    par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LayoutUtils.addMenuIntoSession(request,menu1);

  11. #11
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    j'ai effectué le changement mais l'exception ce declanche toujours.

    voici comment l'action du treeview est codé dans struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <action path="/sort"
    	type="fr.improve.struts.taglib.layout.sort.SortAction"
    	scope="request"
    	validate="false">
    </action>
     
    <action path="/treeview"
    	type="fr.improve.struts.taglib.layout.treeview.TreeviewAction"
    	scope="request"
    	validate="false">
    </action>
    j'ai meme essayer d'utiliser struts layout 1.3 et en ajoutant ceci dans struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <plug-in className="fr.improve.struts.taglib.layout.workflow.LayoutPlugin"/>
    mais le probléme pérsiste

    merci encore c-nvy

  12. #12
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    je pense que j'ai deviné l'erreur est ce qu'il ne faut pas changer cela ?
    par
    dans l'action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <action path="/treeview"
    	type="fr.improve.struts.taglib.layout.treeview.TreeviewAction"
    	scope="request"
    	validate="false">
    </action>
    merci encore

  13. #13
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    Je me suis trop vite précipité j’ai changé l’attribut scope de request en session mais ça n’a pas marché

    aider moi s'il vous plait

  14. #14
    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
    Désolée mais je ne comprends pas pourquoi tu as cette erreur.

  15. #15
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    ça ne fait rien c_nvy;
    vous n'avez pas à vous excuser, dailleurs votre aide m'a été précieuse.
    j'ai réussi a empecher l'exception de ce déclencher ( je ne dit pas que j'ai réussi à resoudre le probléme car je ne sait pas si cette solution à un inconvénient, pour l'instant ça fonctionne ) la solution est de mettre l'objet de type MenuRepository dans la porté request
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setAttribute(MenuRepository.MENU_REPOSITORY_KEY,rep);
    est ce que vous me déconseiller de faire cela et qu'elle est la difference entre mettre cette objet dans la requete ou la session.
    merci encore

  16. #16
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    oups je me suis encore précipité cette solution ne fonctionne pas non plus,
    voici ma page jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html:html lang="true">
      <head>
         <html:base />
    ..........
    ..........
    </head>
    <body>
    
    <layout:treeview name="java"/>
     </body>
    </html:html>
    est ce que cette erreur est du au fait que j'utilise ce tag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:treeview name="java"/>
    entre le tag html de struts sans l'utilsation du tag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <layout:html></layout:html>

  17. #17
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    bonjour c_cny
    enfin j'ai réussi à resoudre mon probléme et cette fois ci, il me semble que je suis sur la bonne vois. je m'explique :
    j'ai fait une recherche apprenfondi sur ce forum et j'ai trouvé une discution qui date de 2006 dans laquel vous avez dit
    Normalement, ce message apparaît quand un objet mis en session n'implémente pas l'interface Serializable. Ce qui est bizarre, c'est que vu le message, c'est la classe TreeviewTag de Struts-Layout qui semble être mise en cause.
    alors j'ai étudier le code source de la classe TreeviewTag.class et j'ai trouvé que si un treeview est annonyme on lui associe l'URI de la requet et si on fait appel plus d'une fois à un treeview dans la meme session cela déclenche une excéption selon cette partie de code de la classe TreeviewTag.class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (pageContext.getRequest().getAttribute(TREEVIEW_NUMBER)!=null) {
    				throw new JspException("There can be only one anonymous treeview per request");
    et dnas la doc de struts-layout on dit
    Cela rend impossible la définition avec les tags menuItem de deux treeviews différents dans une même page
    or moi j'ai défini deux pages jsp ,la premiere contient un treeview deposé dans le repository des menu ( qui était correcte c'est pour cela vous n'avez remarqué aucune anomalie) mais ce treeview me redirige vers la deuxième jsp qui contient un treeview anonyme (construit dans cette jsp) donc si je fait deux appels dans la meme session l'exception est déclenché

    merci pour votre aide c_nvy

  18. #18
    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
    Comme quoi, tout s'explique.

    Merci d'avoir donné la solution au problème.
    Ca peut servir aux autres.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 21
    Par défaut
    Salut

    vous pouver m'envoier le jar de compatiblité de struts-layout 1.2
    avec struts 1.1

    merci

  20. #20
    Membre averti
    Inscrit en
    Février 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 51
    Par défaut
    salut dali
    je vien de vous envoyer le .jar de compatibility sur votre boite email et pour plus d'information consulter le site de struts layout
    http://struts.application-servers.com/
    vous trouverai une documentation de plus sous la section download il y'a tout les .jar de la bibliotheque de struts y compris celui de compatibiliy

    au revoir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SPAW] Comment faire fonctionner Spaw
    Par Seth77 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 09/02/2006, 18h22
  2. [Vs.Net & SQL Serveur] Comment faire fonctionner le Débu
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/08/2005, 19h23
  3. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 16h47
  4. [Chat] Comment faire fonctionner Flash 7 sous Debian ?
    Par piff62 dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 07/03/2005, 15h27
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

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