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 peut on éviter la duplication des pages jsp avec tiles


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut comment peut on éviter la duplication des pages jsp avec tiles
    Bonjour,

    j'utilise struts dans le cadre d'un projet avec Tiles pour la composition des pages (en tete, menu, corps, ...)

    Pour l'instant, on a un fichier de config (tiles-config.xml), une jsp de mise en page (template.jsp) Cette dernière fait appele à d'autres jsp statiques (header.jsp, footer.jsp, ...) puis a différentes pages jsp qui constituent le corps.

    Le problème que je rencontre est lié à la duplication des pages jsp:
    en effet, si l'utilisateur tape http://server/toto.jsp, il faut créer une page toto.jsp qui fait appele à Tiles pour composer une page avec header.jsp, footer.jsp et une autre page toto-body.jsp
    Donc dans toto.jsp, il n'y a rien d'autre qu'une redirection vers tiles

    je voudrais savoir si il n'y a pas moyen de remplacer toto.jsp par un filtre qui intercepte l'url, ou une déclaration dans le stuts-config.xml ou une autre solution.

    Je vous remercie et je compte sur vous pour me débloquer.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Normalement l'utilisateur n'a pas a saisir directement l'adresse de la jsp, mais plutot : http://server/toto.do

    ensuite dans ton struts-config tu fais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <action path="/toto" type="org.apache.struts.actions.ForwardAction" 
    			parameter=".layout.toto"/>
    .layout.toto étant la balise tiles...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Merci Cronys,
    mais la réponse que tu viens de donner, n'évite pas pas la duplication des pages jsp. car si layout.toto est la balise de tiles, il faut quand même qu'il existe la page body.jsp (le corps à inclure). Donc il y aura toujours duplication de la page.

    Si tu as une autre solution, je suis preneur.
    Merci!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Oui mais le body.jsp peut etre général a toutes tes jsp. c'est le principe de Tiles, je ne vois pas trop ce que tu veux faire

  5. #5
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Citation Envoyé par Cronycs
    Oui mais le body.jsp peut etre général a toutes tes jsp. c'est le principe de Tiles, je ne vois pas trop ce que tu veux faire
    Ca m'etonnerait beaucoup ça !

    Citation Envoyé par enok37
    je voudrais savoir si il n'y a pas moyen de remplacer toto.jsp par un filtre qui intercepte l'url, ou une déclaration dans le stuts-config.xml ou une autre solution.
    Si, il y'a un moyen (théoriquement) mais j'ai jamais reussi à le faire fonctionner ! Il s'agit d'indiquer l'url d'une définition dans le fichiers tiles-config.xml, on évite donc de créer le pages du genre toto.jsp qui ne font qu'assembles d'autres pages et définitions.
    Mais il faudrait remplacer la Front Servlet de Struts par celle de Tiles, et dieu seul sait pourquoi la documentation de Tiles est du bidon, donc bonjour les dégats !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Ce que je veux faire c'est éviter d'avoir pour une page jsp deux pages. Je m'explique :
    avec tiles, il faut défenir une page jsp qui va inclure les autres pages statiques (header, menu et footer). Donc pour chaque page ( ici body1 par ex) , il faut la page elle-même (body1.jsp) et une autre page jsp (body1Tiles.jsp par ex ) qui va inclure toutes les éléments statiques sous cette forme:

    <tiles:insert page="/templateAdmin.jsp" flush="true">
    <tiles:put name="title" value="Tiles exemple 1" />
    <tiles:put name="header" value="/header.jsp" />
    <tiles:put name="footer" value="/footer.jsp" />
    <tiles:put name="menu" value="/menu.jsp" />
    <tiles:put name="body" value="/body1.jsp" />
    </tiles:insert>

    Est-ce que je me suis fait comprendre?

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Oui chef ! C'est limpide !
    Maintenant, est ce que moi je me suis fait comprendre ? Parceque dan mon post précédent, je croyais avoir répondu à ta question, mais bon, je vais reformuler :
    Tu peux éviter les fichiers du genre tot.jsp et toto-body.jsp dont tu parles : tu ne gardes que tot-body.jsp, et tu remplaces tot.jsp par une définition dans tiles-config.xml, disons page.toto.

    Ensuite, si tu veux accéder à cette page, tu utilises page.tot (le nom de la définition) à la place de toto.jsp (le nom du fichier) et le tour est joué !

    Sauf que pour en arriver là, il faut remplacer la Servle de Struts par celle de Tiles, et après avoir creusé la dedans pendant plus d'une semaine, je n'y étais jamis arrivé ! Donc théoriquement c'est faisable, mais pratiquement, bonne chance !

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Merci modjo,

    oui chef c'est limpide aussi. Mais en résumé, ce n'est pas gagné d'avance. Alors tu as fais comment pour résoudre ton problème? Tu as finalement dupliqué tes pages ?

  9. #9
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bon, la solution que j'ai prise était un peu trop radicale : je suis passé au JSF, d'un seul coup !

    Sinon, je peux te proposer une solution moins radicale où tu perds un peu en généricité, mais qui t'évite la répétiton :
    Disons que par exemple, tu as une template.jsp, header.jsp, footer.jsp et menu.jsp. Tu peux faire l'insertion du header et du footer dès la page template.jsp, comme ça, dans ta page toto.jsp, tu n'as qu'à utiliser template.jsp comme template et y définir le corps spécifique de toto !
    J'espère que c'est clair, car en relisant ce que j'ai écrit, ça m'a l'air d'une charabia sans tête ni queue .
    Alors pardon d'avance, mais je ne me rappelle plus des tags de tiles alors je peux pas te ournir un exemple concret !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Bon la j'avoue que je ne comprends pas grand chose, je vais montrer comment je fais personnellement dans mes projets, et vous pourrez me dire si je suis totalement HS ou non

    Je fais une page layout.jsp avec (en gros) ceci dedans :

    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ IMPORT DE MES TLD%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html:html>
    	<head>
    		[import des css et script js]
    	</head>
    	<body>
     
    	<div id="menu">
    		<tiles:insert attribute="menu" />
    	</div>
     
    	<div id="main">
    		<tiles:insert attribute="main" />
    	</div>
     
    </body>
    </html:html>
    ensuite dans tiles-def.xml je fais 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
    15
     
    <tiles-definitions>
     
    <definition name=".layout" path="/WEB-INF/jsp/layout/layout.jsp">
            <put name="titre" type="string" value="" />
    	<put name="menu" value="/WEB-INF/jsp/menu.jsp" />
    	<put name="main" />
    </definition>
     
    <definition extends=".layout" name=".layout.toto">
    		<put name="titre" value="Toto" />
    		<put name="main" value="/WEB-INF/jsp/toto.jsp" />
    	</definition>
     
    </tiles-definitions>
    et je réutilise layout.jsp pour toutes mes pages jsp et ainsi avoir le menu en haut tout le temps. J'ai donc comme jsp : layout.jsp, menu.jsp et toto.jsp et rien d'autre.

    Désolé d'avance si ce que je dit ne servira a rien, mais bon .. on sait jamais ^^"

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Merci Cronycs, ça ressemble à ce que je veux. Je crois même que c'est ça. Mais il y a t-il des choses à ajouter dans le fichier struts-config.xml?
    Si oui lesquelles. Moi j'utilise la version 1.3 de struts.

    Merci d'avance

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Et bien, il faut declarer le plug-in Tiles comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <plug-in className="org.apache.struts.tiles.TilesPlugin">
    	<set-property property="definitions-config"
    			value="/WEB-INF/tiles-defs.xml" />
    </plug-in>
    Si tu ne l'as pas deja fais.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Je l'avais faite. Mais j'ai un problème avec cette déclaration. Quand je l'a mets et que je fait par exemple. toto.do pour passer par le controler de struts, j'ai une erreur du genre " Servlet action n'est pas disponible. " Mais quand j'enlève la déclaration tout marche bien (enfin sauf le tiles pour l'instant). Sais tu d'où cette erreur provient?

    merci

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Pour plus de précisions,
    voici mon fichier struts-config.xml :

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
    "http://struts.apache.org/dtds/struts-config_1_3.dtd">
    <struts-config>


    <action-mappings>

    <action path="/index" parameter="/index.jsp"
    type="org.apache.struts.actions.ForwardAction" />

    </action-mappings>


    <message-resources parameter="MessageResources" />


    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
    <set-property property="definitions-config"
    value="/WEB-INF/tiles-defs.xml" />
    <set-property property="moduleAware" value="true" />
    </plug-in>

    </struts-config>

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Est-ce que tu pourrais refaire l'erreure et nous montrer la trace complète de celle-ci ?

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    Voici la trace de l'erreur :


    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
    22 mai 2007 15:12:44 org.apache.struts.action.ActionServlet initChain
    INFO: Loading chain catalog from jar:file:/D:/Jee/Mes%20Projets%20J2EE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/webapps/TilesExemple2/WEB-INF/lib/struts-tiles-1.3.5.jar!/org/apache/struts/tiles/chain-config.xml
    22 mai 2007 15:12:45 org.apache.struts.tiles.TilesPlugin initDefinitionsFactory
    GRAVE: Can't create Tiles definition factory for module ''.
    22 mai 2007 15:12:45 org.apache.struts.action.ActionServlet init
    GRAVE: Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency.
    javax.servlet.ServletException: IO Error while parsing file '/WEB-INF/tiles-defs.xml'. http://struts.apache.org/dtds/tiles-conf_1_3.dtd
    	at org.apache.struts.tiles.TilesPlugin.initDefinitionsFactory(TilesPlugin.java:234)
    	at org.apache.struts.tiles.TilesPlugin.init(TilesPlugin.java:138)
    	at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:884)
    	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:356)
    	at javax.servlet.GenericServlet.init(GenericServlet.java:211)
    	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
    	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:757)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Unknown Source)
    22 mai 2007 15:12:45 org.apache.catalina.core.ApplicationContext log
    INFO: La servlet action est marqué comme indisponible

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    Ben apparemment tu as une erreur dans ton tiles-def.xml ...

    tu peux nous le montrer ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    voici le fichier tile-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
     
      <!DOCTYPE tiles-definitions PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
    "http://struts.apache.org/dtds/tiles-conf_1_3.dtd"> 
     
    <tiles-definitions>
    	<definition name="monecran" page="/myLayout2.jsp">
    	 <put name="title" value="Mon premier ecran Tiles"/>
    	 <put name="header" value="header.jsp"/>
    	 <put name="footer" value="footer.jsp"/>
    	 <put name="menu" value="menu.jsp"/>
    	 <put name="body" value="body.jsp"/>
    	</definition>
    </tiles-definitions>

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 129
    Points
    129
    Par défaut
    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <definition name="monecran" path="/myLayout2.jsp">

  20. #20
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 39
    Points
    39
    Par défaut
    J'ai essayé ce que tu m'as dit mais ça n'a rien changé. Mais en fait
    l'erreur venait d'une faute dans l'entête de la page tiles-defs.xml.

    J'ai remplacé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <!DOCTYPE tiles-definitions PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
    "http://struts.apache.org/dtds/tiles-conf_1_3.dtd">
    par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE tiles-definitions PUBLIC
    "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
    "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
    et ça marché mais pourquoi? je ne sais pas trop. Comme j'utilise tiles 1.3 , je croyais qu'on pouvait le remplacer car c'est ce que je fais.

    Maintenant je vais passé à la vitesse supérieure çad éviter la duplication des pages jsp (ce qui était le pb du début). Je vais essayer ce que tu m'as dit et je vous tiens informer.

    Merci Cronycs et à tous, affaire à suivre dans quelques instants .......

Discussions similaires

  1. Problème des pages JSP avec JBoss
    Par ensatTetouan dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 11/03/2012, 05h25
  2. Réponses: 1
    Dernier message: 08/08/2007, 13h22
  3. [JDOM] peut-on créer des page html avec JDom
    Par med_anis_dk dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/05/2007, 15h39
  4. Réponses: 2
    Dernier message: 22/08/2006, 20h57
  5. Probleme etat (duplication des pages anormales)
    Par dynexd dans le forum Access
    Réponses: 1
    Dernier message: 09/04/2006, 18h03

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