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 :

Inclusion de fichiers automatique


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut Inclusion de fichiers automatique
    Bonjour, j'aimerais savoir si il est possible d'inclure automatiquement un fichier au début et à la fin d'un fichier jsp en utilisant Struts en même temps.

    J'explique mon idée, vous aurez surement une meilleur solution à mon problème.
    J'aimerais en utilisant Struts, créer une sorte de template pour les pages. Dans mon fichier de template il y'a tout le code html de la page avec des définitions de block qui peuvent être renseignés en amont.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <%@ taglib uri="/tags/perso-tags" prefix="perso-tags" %>
    <html>
    <head>
    <perso-tagss:getBlock property="head">
    <title> Defaut title </title>
    </perso-tags:getBlock>
    </head>
    <body>
    <perso-tags:getBlock property="body">
    Voici un text par défaut, si vous le voyez c'est que vous n'avez pas définie le contenu de ce block auparavant.
    </perso-tags:getBlock>
    </body>
    </html>
    Donc dans mes pages jsp, j'aimerais qu'il n'y ai plus que des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@ taglib uri="/tags/perso-tags" prefix="perso-tags" %>
    <perso-tags:setBlock property="head">
    <title> Titre défini par la page </title>
    </perso-tags:setBlock>
     
    <perso-tags:setBlock property="body">
    Bienvenu sur mon site !
    </perso-tags:setBlock>
    Donc je pensais faire une inclusion automatique d'un fichier qui renseignerait certaine partie du header ( comme la langue, la gestion de connexion, les meta, le titre, .. ) au début d'un fichier définissant certain block en fonction de la page où l'on se trouve et que le fichier de template soit automatiquement inclus à la fin pour que s'opère les remplacements dans le template et que la page soit affichée ( l'avantage de cette méthode : un seul fichier de mise en page, très facilement modifiable et qui permet en plus de pouvoir définir des squelettes de pages particulier pour certaine page à travers une variable. )

    J'ai donc créé ces tags setBlock et getBlock qui marche parfaitement bien.
    J'ai ensuite ajouté dans mon web.xml une section jsp-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <jsp-property-group>
      <description>JSP configuration </description>
      <url-pattern>*.do</url-pattern>
      <include-prelude>include/headers.jsp</include-prelude>
      <include-coda>include/template.jsp</include-coda>
    </jsp-property-group>
    Celà marchait très bien également.

    Le problème c'est que si je veux utiliser struts ( dont je définie le mapping par *.do ) il n'y a plus d'include automatique....


    je suis assez bloqué. Je n'ai pas envie de faire en haut de chaque fichier : <%@ include file="header.jsp" %>
    et pareil en bas pour le fichier gérant l'affichage, car il y'a vraiment beaucoup de fichier et je trouve que celà n'est pas très évolutif ( un changement de nom de fichier ou de, et on change tout à la mano dans 600 fichiers .. )

    J'espère avoir été assez explicite, si ce n'est pas le cas, je vous encourage à me poser des questions pour que nous puissions ensemble trouver une solution à ce problème ( ça fait très campagne politique )

    Cordialement domen

  2. #2
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    alors pour faire de la mise en page automatique en définissant un header, un menu, un footer commun, il faut que tu utilises tiles.

    Cela correspond tout à fait ce que tu veux faire:
    consulte ces liens pour avoir une idée de comment faire :
    - lien1
    - lien2

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut
    non justement ça ne m'a pas convenu. Je l'avais utilisé avant, et il me fallait 2 fichiers par pages ( un pour spécifier la définition de tiles à utiliser et un deuxieme pour spécifier la partie changeante de la page )

    Et celà donne encore trop de travail. J'aimerais justement faire abstraction de la mise en page, qu'elle soit géré automatiquement une fois que j'ai spécifié le contenu des blocks. Il n'y a aucun moyen d'apposer une couche entre la spécification des variables dans une page jsp et l'envoi au navigateur ?

  4. #4
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    oui, effectivement, en relisant ton premier post plus en profondeur, je pense avoir mal compris ta demande

    Je vais essayé de reformuler pour être sur d'être sur la même longueur d'onde :
    tiles ne te conviens pas, car il faut 3 fichiers :
    - le template pour le body
    - un fichier où du définit le squelette de la page
    - ton fichier jsp qui se base sur ce squelette.
    Tu veux uniquement avoir que le template et ton fichier jsp qui utilise un squelette que tu as définit mais directement inclus dedans.

    A priori, tu t'es aussi créé de nouveaux tag pour inclure dynamiquement ce squelette dans ta page jsp
    (je fais une apparté, je suis intéressé pour savoir comment t'as fait pour créer une nouvelle liste de tag qui sont interprétés ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@ taglib uri="/tags/perso-tags" prefix="perso-tags" %>
    <perso-tags:setBlock property="head">
    <title> Titre défini par la page </title>
    </perso-tags:setBlock>
     
    <perso-tags:setBlock property="body">
    Bienvenu sur mon site !
    </perso-tags:setBlock>
    Donc les tags dans perso-tags te servent à placer ton squelette et à générer les infos html qu'il contiennent comme le header et le footer

    alors, si c'est bien ces blocs qui définissent ton squelette, pourquoi avoir ajouter ces ligne dans ton web.xml ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <jsp-property-group>
      <description>JSP configuration </description>
      <url-pattern>*.do</url-pattern>
      <include-prelude>include/headers.jsp</include-prelude>
      <include-coda>include/template.jsp</include-coda>
    </jsp-property-group>
    Et si c'est tjs ces blocs qui définissent ton squelette, le mapping *.do de struts devrait suffire, puisque de toute façon, ceux sont des tag blocks qui font le boulot ?

    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut
    En fait je pense que je vais recommencer l'explication plus détaillée.

    J'ai créé mes propres tags qui me permettent d'affecter un contenu compris entre deux balises à une variable dans le pageContext ( l'endroit n'a pas d'importance )

    Donc la séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <pt:setBlock name="title"> Bonjour sur mon site </qt:setBlock>
    positionne le pageContext("title") avec le contenu Bonjour sur mon site

    Imaginons que j'ai une suite de ces balises, dans une page jsp, qui positionnent du contenu comme ça dans le pageContext.

    Maintenant j'aimerais que le fichier de template qui contient des séquences de : <pt:getBlock name="xxxx" />
    soit automatiquement appelé après la page jsp principale afin de générer le HTML de la page suivant ce que la page JSP lui a fourni comme un information grâce au pageContext.

    Comme ça je m'abstiens totalement de la mise en page, je ne fais que de la gestion de contenu dans mes pages JSP sans avoir à mettre un <%@ include ..> en bas de chaque page

    ATTENTION Mes tags ne me permettent pas d'inclure une page JSP à la fin pour générer le html d'après le template. Ces tags positionnent ou récupèrent des données du pageContext.

    C'est justement ce que je voulais faire : include automatiquement des fichiers jsp après mes pages jsp par l'ajout dans le web.xml

    Cordialement,
    Domen

  6. #6
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    oki, je commence à comprendre doucement ton idée

    Je vais paraitre peut être embêtant, mais une image vaut 1000 mots.
    Est-ce qu'il te serai possible de faire un schéma expliquant les différentes séquences de ton raisonnement.
    Pour ma part, cela m'aiderait à comprendre au plus juste ce que tu veux faire

    Sinon, j'ai fouillé un peu pour la création de taglib perso pour voir ce qu'il était possible de faire.
    Donc, d'après ce tuto, rien ne t'empêche de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <%@ taglib uri="/tags/perso-tags" prefix="perso-tags" %>
     
    <perso-tags:setHeader version="1" title="mon titre" />
     
    <perso-tags:setBody version="1">
    le code propre à ta jsp avec son form, etc ...
    </perso-tags:setBody>
     
    <perso-tags:setFooter version="1" />
    Ensuite dans le code java du tag, tu peux très bien aller chercher le contenu d'une page jsp qui contient les infos :
    - une page pour le header
    - une page pour le body
    - une page pour le footer

    C'est au niveau de ta classe que tu fait l'aiguillage du contenu à charger en fonction du num de version par exemple.
    Les chemins d'accès à ces pages sont défini au niveau de ta classe ou alors au niveau du fichier properties.

    Exemple :
    tu créée 3 fichiers templates :
    - header.jsp
    - body.jsp
    - footer.jsp

    Dans ton fichier properties ou un fichier xml de config, tu définies :
    - HEADER = /template/header.jsp
    - BODY = /template/body.jsp
    - FOOTER = /template/footer.jsp

    Ensuite dans ta class java pour le traitement associé à ton tag, tu fais cela :
    - quand le tag setHeader est appellé, il charge le contenu du fichier designé par HEADER
    - quand le tag setBody est appellé, il charge le contenu du fichier designé par BODY
    - quand le tag setFooter est appellé, il charge le contenu du fichier designé par FOOTER

    Comme cela, toi, tu n'as pas à utiliser <%@include ...>, c'est le tag qui s'en occupe.
    Et si par la suite du veux changer le nom des fichiers, tu le fais au niveau du fichier qui contient les déclarations de :
    - HEADER
    - BODY
    - FOOTER
    Avec ça, tu peux changer tes pages à inclure sans repasser dans toutes tes pages jsp.

    Comme cela, ta page jsp principale ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@ taglib uri="/tags/perso-tags" prefix="perso-tags" %>
    <perso-tags:setHeader version="1" title="mon titre" />
     
    <perso-tags:setBody version="1">
    le code propre à ta jsp avec son form, etc ...
    </perso-tags:setBody>
     
    <perso-tags:setFooter version="1" />
    et si tu veux inclure des header, etc ... different, avec le num de version tu peux définir le fichier jsp template à charger.

    Dis moi si je me rapproche par rapport à ce que tu recherches

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

Discussions similaires

  1. [debutant]inclusion de fichier .js !!!
    Par christophebmx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/01/2005, 14h16
  2. [Inclusion des fichiers] hierarchie
    Par Casp dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/07/2004, 12h43
  3. XML Schema et inclusions de fichiers XML
    Par monk31 dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 08/10/2003, 14h17
  4. Inclusion de fichier .h
    Par Tony49 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/11/2002, 11h10
  5. Inclusion de fichiers en IDL
    Par babou dans le forum CORBA
    Réponses: 10
    Dernier message: 30/07/2002, 16h47

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