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 :

[TILES] Menu et Body (ou content)


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut [TILES] Menu et Body (ou content)
    J'essaye de comprendre TILES.

    SUr ce lien : http://www.theserverside.com/article...tss?l=Tiles101

    Il est ecrit :
    . When you add a new page, you add a new Struts mapping (the Controller), add a new Tiles definition (the View's Layout) and the new jsp (the View). For a site with 20 pages, you would have 22 files (1 tiles-def.xml, aSiteLayout.jsp, + 20 content pages).
    Imaginons que je veux creer un site avec :
    - 1 header commun a toutes mes pages
    - 1 menu commun a toutes mes pages
    - 1 footer commun a toutes mes pages

    Que dans ce site je veux afficher 4 pages differentes :
    - index
    - page1
    - page2
    - page3

    Ces 4 pages utilisent donc un layout commun :

    Ma question : combien de JSP vais je devoir creer ?
    Au debut et d'apres l'article en anglais je me dis 9 :
    - 1 mainLayout.jsp
    - 1 index.jsp
    - 4 body ou content. jsp (1 pour accueil, 1 pour page1, 1 pour page2 et pour page3)
    - 1 menu.jsp
    - 1 footer.jsp
    - 1 header.jsp

    plus le fichier de definition : tiles-def.xml

    soit 10 fichiers a creer ...

    Je me dis chouetteeeeeeeee !!! Tiles c'est super bien

    Okay avec ce que j'ai lu rapidement sur Tiles je me dis que dans le menu il suffit de cliquer sur le liens du body ou du content que l'on veut afficher et hop c'est magique, a laffichage de la nouvelle page, il n'y a que le body qui change au milieu de ma page. Un peu comme les frames sauf qu'on recharge qd meme tout.

    Je commence a regarder les exemples, les tutoriaux et la .. bah je vois rien de ca... c'est la cata ... en plus dans les exemples n'y a jamais de vrai lien dans les menu !!! (c est pas un menu si y a pas de liens )

    Resultats aujourd'hui j'ai l'impression qu'il faut en fait pour mes 4 pages, creer 12 jsp !! oui oui
    - 1 mainLayout.jsp
    - 4 xxx.jsp ( 1 par body ou content pour appeler la bonne definition correspondante )
    - 4 body ou content. jsp (1 pour accueil, 1 pour page1, 1 pour page2 et pour page3)
    - 1 menu.jsp
    - 1 footer.jsp
    - 1 header.jsp

    et que mon fichier tiles-def.xml contiendra quelque chose comme ca :
    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
      <definition name="site.accueil" path="/mainLayout.jsp">
          <put name="title"  value="Mon titre" />
          <put name="header" value="/header.jsp" />
          <put name="menu"   value="/menu.jsp" />
          <put name="footer" value="/footer.jsp" />
          <put name="body"   value="/accueil.jsp" />
      </definition>
      <definition name="site.page1" path="/mainLayout.jsp">
          <put name="title"  value="Mon titre" />
          <put name="header" value="/header.jsp" />
          <put name="menu"   value="/menu.jsp" />
          <put name="footer" value="/footer.jsp" />
          <put name="body"   value="/page1.jsp" />
      </definition>
      <definition name="site.page2" path="/mainLayout.jsp">
          <put name="title"  value="Mon titre" />
          <put name="header" value="/header.jsp" />
          <put name="menu"   value="/menu.jsp" />
          <put name="footer" value="/footer.jsp" />
          <put name="body"   value="/page2.jsp" />
      </definition>
      <definition name="site.page3" path="/mainLayout.jsp">
          <put name="title"  value="Mon titre" />
          <put name="header" value="/header.jsp" />
          <put name="menu"   value="/menu.jsp" />
          <put name="footer" value="/footer.jsp" />
          <put name="body"   value="/page3.jsp" />
      </definition>
    Donc en gros pour une nouvelle page je dois rajouter 2 jsp :
    - le body correspondant
    - l'appel de la definition

    et 7 lignes dans le fichier tiles-def.xml... qui risque donc de devenir tres rapidement tres gros !!!!

    donc si un jour je veux changer le layout et que la page n'a plus 4 composants mais 5 (par exemple une partie pub sous le header), faut que j' impacte la modification dans toutes les definitions ... soit ici 4 fois ....

    Je n'imagine meme pas avec une vrai application de 200 jsp ...

    A ce moment la je trouve ca un peu moins interessant et je cromprend mieux pourquoi les menu des exemples n'etaient jamais vraiment implementés ...

    C'est vraiment ca ???

    Dites moi que j'ai raté un truc !!! lol

  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
    Dans ton fichier tiles-def.xml, tu as la possibilité de définir un tile uniquement destiné à l'héritage.
    Dans celui-ci, tu définis la partie commune à toutes les jsp, soit header, menu et footer par exemple.
    Ensuite, tu définis un tile pour chaque page jsp, avec par exemple un titre et un body comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      <definition name=".layout" path="/mainLayout.jsp"> 
          <put name="header" value="/header.jsp" /> 
          <put name="menu"   value="/menu.jsp" /> 
          <put name="footer" value="/footer.jsp" /> 
      </definition>
      <definition name="site.page1" extends=".layout"> 
          <put name="title"  value="Mon titre 1" /> 
          <put name="body"   value="/page1.jsp" /> 
      </definition>
      <definition name="site.page2" extends=".layout"> 
          <put name="title"  value="Mon titre 2" /> 
          <put name="body"   value="/page2.jsp" /> 
      </definition>
    Quant à ta jsp menu, comment l'as-tu réalisé ?
    As-tu utilisé un tag Struts-layout ?

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut
    Effectivement l'heritage permet de ne pas re-impacter une modification du layout principal... je n'ai pas encore assez de recul pour y penser
    Merci bcp pour cette info !!!

    Mais tu confirmes bien que pour une nouvelle page, je dois en fait creer 2 jsp ? meme si une est quasiment vide ....


    Pour le menu,
    l'exemple que j'ai se compose de pour la partie tiles-def.xml :
    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
      <!-- menu logo definition -->
    <definition name="menu.links" path="/common/menu.jsp" >
      <put name="title" value="Main Menu" />
      <putList name="items" >
        <add value="Home" />
        <add value="Basic Page" />
        <add value="First Portal" />
        <add value="First Definition" />
      </putList>
      <putList name="links" >
        <add value="/index.jsp" />
        <add value="/basicPage.jsp" />
        <add value="/portalPage.jsp" />
        <add value="/firstDefinition.jsp" />
      </putList>
    </definition>
    et dans menu.jsp le code 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
    20
    21
    22
    23
    24
    25
    <bean:define id="links" name="links" type="java.util.List" scope="page" />
    <% Iterator i = links.iterator(); %>
     
    <%-- iterate on items list --%>
    <logic:iterate id="iterateItem" name="items" >
    <bean:define id="item" name="iterateItem" type="java.lang.String" scope="page" />
     
    <tr>
      <td width="10" valign="top" ></td>
      <td valign="top"  >
        <%-- check if selected --%>
    	<logic:notEqual name="selected" value="<%=item%>">
    	  <% // Compute link value
    	    String link = (String)i.next();
    	    if(link.startsWith("/") )
    		  link = request.getContextPath() + link;
    	  %>
    	  <font size="-1"><a href="<%=link%>"><%=item%></a></font>
    	</logic:notEqual>
    	<logic:equal name="selected" value="<%=item%>">
    	  <font size="-1" color="fuchsia"><%=item%></font>
      </logic:equal>
      </td>
    </tr>
    </logic:iterate>
    Je comprends tres bien cet exemple, l'avantage si s'en est vraiment un, c'est que le nom et les liens sont parametrable dans le fichier tiles-def.xml.

    Mais pas de trace de tag Struts-layout.

    Si tu as un exemple tout simple je suis fortement interessé !!

    Merci bcp en tt cas pour cette premier reponse

  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
    Excuse-moi mais je ne comprends pas pourquoi tu dis que pour chaque page, il faut créér 2 jsp, une pour le body (là je suis d'accord) et une pour l'appel de la définition (?).

    Pour moi, l'appel de la définition se fait dans le struts-config.xml via le tag forward de chaque action.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut
    Parce que je n'utilise pas struts dans mon appli de test pour le moment.
    Dans un tutoriel j'ai vu qu'on pouvait utiliser Tiles independament de struts. Donc dans un premier temps je fais sans Struts.

    Donc en fait ma deuxieme jsp correspond a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <tiles:insert definition="site.page2" flush="true"/>
    Et c'est tout ....

    C'est bien l'appel de la definition, et dans mon menu le lien renvoie sur cette page.

    Ca marche tres bien.
    Mais je trouve ca un peu nul de devoir faire ca a chaque fois. Avoir besoin de creer une jsp avec 2 lignes.

    Donc tu affirmerais
    l'appel de la définition se fait dans le struts-config.xml via le tag forward de chaque action.
    Donc en utilisant Struts et un forward, pas la peine de creer ma deuxieme jsp.

    Je pourrais avoir un exemple de declaration de tes forwards dans ce cas la dans le struts-config.xml ?

  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
    Désolée, je pensais que tu utilisais Struts.
    Il n'est donc pas utile que je t'explique comment coder dans le fichier struts-config.

    As-tu essayé de faire appel à tes définitions directement dans ton tiles-def.xml, là où tu déclares tes links ?

    Par exemple, supposons que basicPage.jsp correspond à site.page2, au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <add value="/basicPage.jsp" />
    peut-être que tu peux faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <add value="site.page2"/>
    C'est une idée mais je ne sais pas si ça peut marcher !

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut
    Je viens d'essayer mais ca ne marche pas, le liens que j'obtiens du cote client fini par la definition, c'est a dire :
    http://www.monDomaine.com/monAppliWeb/site.page2

    Je m'en doutais un peu. C'est normal parce que en fait quand tu declares ta liste de liens ou autre chose (en fait c'est une liste de String avant tout, la declaration est la meme pour des liens ou des noms de liens) dans le fichier tiles-def.xml, ta liste n'est pas reinterpreté et directement mise en session comme une liste de String.

    Le code de ton struts-config.xml m'interesse car au final je compte integrer Tiles a une application Struts.

    C'etait juste pour mon premier essai, et pour comprendre les mecanismes de base de Tiles, que je ne l'ai pas utilisé avec STruts dans un premier temps.

    Mais donc d'apres ce que tu me laisses supposer dans un forward dans le struts-config.xml on peut appeler directement une definition Tiles ?

    Je veux bien un exemple

  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
    Ok.

    Bon, admettons que tu codes ceci dans ton tiles-def.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      <definition name=".layout" path="/mainLayout.jsp"> 
          <put name="title"  value="Mon titre" /> 
          <put name="header" value="/header.jsp" /> 
          <put name="menu"   value="/menu.jsp" /> 
          <put name="footer" value="/footer.jsp" /> 
      </definition> 
      <definition name="site.page1" extends=".layout"> 
          <put name="body"   value="/page1.jsp" /> 
      </definition>
    Dans le struts-config.xml, tu peux coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <action path="/tonAction1" type="tonpackage.tonAction1" name="tonAction1Form" ...>
       <forward name="success" path="site.page1"/>
    </action>

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut
    effectivement ca marche tres bien !
    Merci beaucoup !

    Donc si je ne veux pas creer ma seconde page, il suffit de creer un forward Struts .
    C'est simple et Tiles deviens tres interessant dans ce cas la !

    On viens de voir l'heritage des definitions, on peut appeler une definition dans une autre, on peut faire un forward Struts sur une definition.

    Tu connais d'autres fonctions tres utiles et interessantes de Tiles a me conseiller ?

    Tu m'as parlé de TAGs Struts-Layout, j'en ai juste vaguement entendu parler, quel est l'interet d'integrer STruts-Layout a Tiles pour toi ?

  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
    Je t'ai parlé de Struts-Layout parce que, dans le projet sur lequel je bosse en ce moment, dans menu.jsp, je fais appel au calendrier et au treeview de Struts-Layout via les tags layout:date et layout:treeview.

    Quant à l'utilisation de Tiles, je n'ai rien expérimenté de plus.

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Par défaut gerrry; del from....
    Okay !!!

    Merci beaucoup en tout cas pour tes eclaircissements sur ce sujet

    Donc pour resumer avec Struts et Tiles j'ai besoin de 9 jsp pour mon probleme, avec Tiles mais sans Struts 12 !!!!

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

Discussions similaires

  1. [tiles] menu à droite et à gauche
    Par grospatapouf dans le forum Struts 1
    Réponses: 11
    Dernier message: 27/11/2008, 10h21
  2. [tiles] Menu absent parfois
    Par Mister Nono dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/03/2007, 13h36
  3. JSF + Tiles, modifier seulement le body d'une page
    Par LeVickingRoux dans le forum JSF
    Réponses: 1
    Dernier message: 14/02/2007, 13h08
  4. [Tiles] action depuis le menu
    Par khallouk_soft dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/12/2006, 16h45
  5. [TILES][Ajax] menu tiles + affichage Ajax
    Par Azanael dans le forum Struts 1
    Réponses: 3
    Dernier message: 23/05/2006, 16h27

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