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 :

[JSP/EL] Imbrication d'EL


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut [JSP/EL] Imbrication d'EL
    Bonjour

    Je veux créer une balise jsp pour simplifier l'écriture de mes pages.
    J'ai un petit problème avec les EL dans les jsp.

    1) D'abord une petite question : si je veux créer une balise personnalisée qui génère du code jsp, qui lui-même sera réinterprété :
    - Si je génère le code en Java dans une classe représentant ma balise, avec "this.getJspContext().getOut().println(mon-code-jsp-à-réinterpréter)", ça ne marche pas (le code est directement écrit dans la page) ?
    - Si je génère le code en Java dans un fragment de jsp représentant ma balise, avec <%= mon-code-jsp-à-réinterpréter %> ça ne marche pas (le code est directement écrit dans la page) ?
    - Si je génère le code dans un fragment de jsp en écrivant simplement le code jsp qui doit remplacer la balise, ça marche ?

    Note : j'ai essayé tout ce que je viens de décrire et il me semble que ça fonctionne comme de l'ai présenté, mais j'aimerais avoir une confirmation, pour être certain de comprendre ce qui est réinterprété et ce qui est directement écrit dans la page...


    2) Ensuite ma question principale : j'aurai besoin d'imbriquer des El l'une dans l'autre (ou de faire autrement, ça me va bien aussi).
    Je veux créer une balise <texte> qui me permette de générer le code de création d'un champ texte lié à un objet java grâce à Spring MVC. Le code avec Spring (code que je voudrais générer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <spring:bind path="objetModeleFormulaire.texte1">
            <input type="text" name="texte1" value="${objetModeleFormulaire.texte1}">
            ${status.errorMessage}
        </spring:bind>
    Peu importe si le code ne vous parle pas trop, voilà ce qu'il y a à savoir :
    - objetModeleFormulaire est le nom d'un objet qui se trouve dans la requête http
    - texte1 est le nom d'un attribut de cet objet
    - J'aimerais créer une balise de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <form:texte donnees="objetModeleFormulaire" attribut="texte1" />
    La balise a deux attributs donnees et attribut qui contiennent *le nom* de l'objet et *le nom* de l'attribut à inscrire dans le code à générer.
    La balise doit générer le code de 4 lignes indiqué plus haut.

    Mon problème : comment écrire le code de cette balise jsp ?
    - Je n'ai pas réussi avec une classe Java puisque je n'arrive pas à réinterpréter du code jsp généré et que je dois générer du code contenant des balises de Spring.
    - Je n'ai pas réussi avec un fragment de jsp : en gros je voudrais écrire quelque chose comme ça :
    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 prefix="spring" uri="http://www.springframework.org/tags" %>
    <%@ tag isELIgnored="false" %>
    <%@ tag body-content="scriptless"  %>
     
    <!-- Attributs de la balise -->
    <%@ attribute name="donnees" required="true" %>
    <%@ attribute name="attribut" required="true" %>
     
    <!-- Code de la balise -->
    <spring:bind path="${donnees}.${attribut}">
    	<input type="text" name="${attribut}" value="${${donnees}.${attribut}}">
    	${status.errorMessage}
    </spring:bind>
    L'idée du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="${${donnees}.${attribut}}"
    est de récupérer les valeurs des attributs "donnees" et "attribut" (qui doivent être "objetModeleFormulaire" et "texte1" dans mon exemple) pour générer l'expression : "${objetModeleFormulaire.texte1}". Mais comme je ne peux pas imbriquer des EL, je ne peux pas écrire ça.
    Et si j'écris l'expression avec un '\' devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \${${donnees}.${attribut}}
    le champ de texte contient la valeur ${objetModeleFormulaire.texte1}, non interprétée (ce qui était prévisible).

    Voilà, voilà, toute aide, remarque, indice ou réponse sur l'une de mes questions serait vraiment la bienvenue, merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par kkort Voir le message
    1) D'abord une petite question : si je veux créer une balise personnalisée qui génère du code jsp, qui lui-même sera réinterprété :
    Pas possible car le jsp n'est pas interprété mais compilé. Donc tout ce qui sort de ton jsp arrive sur chez le client.

    2) Ensuite ma question principale : j'aurai besoin d'imbriquer des El l'une dans l'autre (ou de faire autrement, ça me va bien aussi).
    Pas possible non plus, par contre pour accéder à des attributs dont tu ne connais pas a priori le nom, utilise la notation sous forme de tableau.


    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{requestScope[donnees][attribut]}

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Pas possible car le jsp n'est pas interprété mais compilé. Donc tout ce qui sort de ton jsp arrive sur chez le client.
    Je me suis peut-être mal exprimé. Il existe au moins un cas où ça fonctionne (mais "réinterprété" n'est peut-être pas le mot qui convient). Si je définis une balise par un fragment de jsp, celui-ci peut contenir du code jsp : la balise est remplacée par le code du fragment, le code ainsi obtenu étant lui-même interprété. Donc je peux créer une balise jsp dont la définition contient du code jsp (c'est important ici parce que je veux simplifier l'utilisation des balises jsp de Spring).
    N'y a-t-il aucun moyen de faire la même chose en définissant une balise par une classe Java ?

    Pas possible non plus, par contre pour accéder à des attributs dont tu ne connais pas a priori le nom, utilise la notation sous forme de tableau.


    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{requestScope[donnees][attribut]}
    Ok, merci, ça fonctionne avec ${requestScope[donnees][attribut]}

    Voici donc le code de mon fragment de jsp, pour ceux que ça intéresserait :
    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
    <!-- Champ de texte en utilisant Spring MVC -->
     
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
     
    <%@ tag isELIgnored="false" %>
    <%@ tag body-content="scriptless"  %>
     
    <!-- Informations sur la balise -->
    <%@ attribute name="donnees"  required="true" %>
    <%@ attribute name="attribut" required="true" %>
     
    <!-- Code de la balise -->
    <spring:bind path="${donnees}.${attribut}">
    	<input type="text" name="${attribut}" value="${requestScope[donnees][attribut]}">
    	${status.errorMessage}
    </spring:bind>
    Ce qui permet de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <spring:bind path="objetModeleFormulaire.texte1">
        <input type="text" name="texte1" value="${objetModeleFormulaire.texte1}">
        ${status.errorMessage}
    </spring:bind>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form:texte donnees="objetModeleFormulaire" attribut="texte1" />
    dans les pages jsp.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tu peux utiliser les include pour organiser la source de ton jsp, les include sont évalués lors de la compilation du JSP -> pas possible de générer automatiquement.

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

Discussions similaires

  1. [XSLT][JSP] solution technique pour cas typique
    Par Alix_10 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/09/2006, 14h09
  2. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 13h35
  3. [JSP/Servlet] Outils pour developper?
    Par BenoitM dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2004, 12h03
  4. [debogage]JSP
    Par polo54 dans le forum JBuilder
    Réponses: 3
    Dernier message: 10/06/2003, 12h57
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 09h07

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