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

Servlets/JSP Java Discussion :

Include explicite d'une jsp dans une autre


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut Include explicite d'une jsp dans une autre
    bonjour,

    j'ai une page jsp qui inclut une autre jsp
    actuellement ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <%String query="";%>
    <%@include file="/queries/query1.jsp"%>
    <%out.print(query);%>
    avec dans le fichier query1.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%query="SELECT * FROM TABLE1";%>
    maintenant j'aimerais rendre ca dynamique et pouvoir include query1.jsp ou query2.jsp par exemple
    j'ai donc essayé avec un <jsp:include
    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <%
    String query="";
    String nb="1";
    %>
    <jsp:include page="/queries/query<%=nb%>.jsp"></jsp:include>
    <%out.print(query);%>
    mais alors le out.print(query) ne me renvoie pas la valeur que j'ai mis dans le query1.jsp vers la page qui l'a inclu.

    Comment faire?

  2. #2
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Tu n'as pas a déclarer dans la page appelante le String query

    tu le déclares dans query1.jsp

    il faut voir la jsp incluse comme une portion de la jsp appelante.

    Ce qui donne JSP 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%String query="SELECT * FROM TABLE1";%>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <% String nb="1";%>
    <jsp:include page="/queries/query<%=nb%>.jsp"></jsp:include>
    <%=query%>

    Petit info si tu as plusieurs lignes de code dans une jsp tu peux simplement utiliser <% et %> entre la premiere et la derniere ligne de code java

    Cela peut aussi s'intercaler avec du html exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%for(int i=0;i<10;i++){%><b>coucou</b><%}%>
    Pour afficher une valeur dans la page tu ne dois pas faire :
    maisPetite question, est ce que ce que tu montres est juste un exemple ou tu veux réellement avoir une jsp/requête.
    Si c'est le cas autant faire un tableau de requête et toujours inclure cette jsp

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    j'ai testé et si je ne declare pas query dans la page appelante j'ai un message d'erreur :
    type Rapport d'exception

    message

    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.

    exception

    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP

    Une erreur s'est produite à la ligne: 3 dans le fichier jsp: /Test/test.jsp
    Erreur de servlet générée:
    query cannot be resolved


    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


    cause mère

    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP

    Une erreur s'est produite à la ligne: 3 dans le fichier jsp: /Test/test.jsp
    Erreur de servlet générée:
    query cannot be resolved


    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:414)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.20.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    le out.print fonctionne aussi
    mais c vrai que c plus long a ecrire

    et puis tout depend ce que tu veux ecrire
    si je veux ecrire 3 lignes
    le mieux est-il d'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%
    out.println("LINE1");
    out.println("LINE2");
    out.println("LINE3");
    %>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%="LINE1"%>
    <%="LINE2"%>
    <%="LINE3"%>
    surtout que cette notation ne semble pas permettre le passage a la ligne, est-ce que je me trompe?
    alors dans ce cas le out.println ne me parait pas une si mauvaise solution

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    Le comportement du jsp:include varie-t-il en fonction de la version de servlet utilisée?ou ptet y'a-t-il une config particuliere a mettre en place?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    link256, tu avais testé ce que tu m'avais proposé comme solution? ptet que j'ai pas la bonne configuration si ca marche chez toi

  7. #7
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Salut,

    je n'ai pas tester quelque chose de dynamique comme tu le proposes et je passe par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ include file="Context.jsp" %>
    Et la je ne pense pas que tu puisses obtenir ce que tu veux car une JSP est compilée une et une seule fois, je m'explique si tu modifies la page incluse la jsp conteneur ne sera pas forcement mise à jour dans mon cas ca ne l'est pas.

    Si tu modifies la page appelante sa mettra à jour aussi les données de la partie incluse.
    Je ne sais pas si cela est configurable ou non (specifique à chaque serveurs applicatif ) et ce qui pour moi s'apparente en sorte à un problème de cache ma solution vider le cache du serveur contenant les jsp compilées (maJSP.class).

    Je sais pas si j'ai vraiment répondu à ta question

    Je te propose d'expliquer ce que tu veux faire voir si on peut améliorer le mécanisme/conception ou trouver une autre alternative à ton problème.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    Ok,

    ce que je cherche a faire en fait c'est un outil d'extraction en csv generique.
    j'aurais donc une classe qui se chargera de l'output sur base d'une requete sql qui serait elle sauvée dans un fichier jsp sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%String query="select champs from table";%>
    le truc c'est que ces fichiers jsp contenant les requetes existent deja et servent aussi a autre chose et si on change la requete dans un de ces fichiers je dois avoir la meme requete pour mon extraction csv donc je ne peux pas me permettre d'avoir la requete a plusieurs endroits c'est pourquoi je voulais faire un include dynamique de ces fichiers en fonctions d'un parametre

    donc un truc genre un fichier csv.jsp qui ferait un include du fichier query_X (X etant le nom de la table environ 300 tables je pense)
    et qui apres effectuerait la requete, les conversions en fonctions des types de champs,et l'output final

    j'aurai besoin d'un meme principe pour mon outil de reporting (crystal reports)

  9. #9
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Ne pourrais tu pas simplement utiliser un fichier properties contenant l'ensemble de tes requêtes ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    query.1=select * from dual
    query.2=select totofrom dual
    query.3=select * from dual
    ....
    Via une méthode statique tu récupère la bonne requête au niveau de ta jsp

    Ce qui pourrait répondre à ton besoin.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    mais comme je l'ai precisé les fichiers existent deja actuellement et doivent etre maintenus car ils servent dans l'application developpée en openlaszlo et avoir le meme code a deux endroits n'est jamais tres propre
    mais bon si y'a pas moyen de faire autrement va bien falloir me rendre a l'evidence

Discussions similaires

  1. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Réponses: 3
    Dernier message: 13/08/2009, 00h44
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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