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

Taglibs Java Discussion :

tags jsp et Expression Languages


Sujet :

Taglibs Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut tags jsp et Expression Languages
    Bonjour,

    C'est mon tout premier message sur ce forum et la question que je vais vous poser risque de vous paraitre digne d'un débutant.

    Est-il possible de placer des expressions du type ${expression} dans les attributs d'un tag <jsp:useBean> et <jsp:setProperty> ?

    par exemple,

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <c:set var="idExemple" value="instanceDeMaClasse"/>
    <jsp:useBean id="${idExemple}" scope="page" class="monpackage.maclasse"/>

    Je place ma question dans son contexte :

    la page dont je vous soumets le code ci-dessous reçoit une pléiade de paramètres (paramName = paramValue), dont certains qui sont volontairement du type idAttribut_idPersonne = valeurAttribut. Par exemple, anneeDeNaissance_conjoint = 1978.

    Le but est d'attraper tous les paramètres de ce type pour en attribuer la nouvelle valeur à l'attribut approprié de la personne appropriée. Dans l'exemple proposé ci-dessus, la Personne ayant l'id "conjoint" se verra changer son "anneeDeNaissance" à 1978.

    Vous l'aurez deviné, je me sers d'un bean "Personne" dont le code (est-il vraiment nécessaire ?) est donné ci-après.

    Code de la jsp, commenté

    Code jsp : 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
    29
     
    <%@page contentType="text/plain" pageEncoding="UTF-8" %>
    <%@page isELIgnored="false" %>
    <%@page import="metier.assure.Personne" %>
     
    <%-- Java Standard Tag Library --%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
     
    <%-- je récupère tous les paramètres de la requête --%>
    <c:forEach items="${param}" var="p">
        <c:choose>
    <%-- traitement spécial pour ceux qui contiennent un tiret bas --%>
        <c:when test="${fn:contains(p.key,'_')}">
    <%-- je stocke attribut et id dans un tableau --%>
            <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    <%-- test qui affiche correctement id, son attribut et la valeur à appliquer --%>
            id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    <%-- et là ca coince… je veux appeler le bean identifié dans le paramètre :_( --%>
            <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    <%-- ici aussi je suppose --%>
            <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
        </c:when>
        <c:otherwise>
    <%-- test pour les autres types de paramètre --%>
            parametre : ${p.key}, valeur : ${param[p.key]}<br/>
        </c:otherwise>
        </c:choose>
    </c:forEach>

    Le code du bean Personne :

    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
     
    package metier.assure;
     
    public class Personne {
     
        /** Année de naissance */
        Integer adn;
     
        public Personne(){
        }
     
        public Integer getAdn() {
            return adn;
        }
     
        public void setAdn(Integer ddn) {
            this.adn = adn;
        }
    }
    Pour information, l'erreur que je rencontre dans le log Tomcat est dans le prochain message.

    Pourriez-vous m'aider ? Je vous avoue que je m'attends à la réponse courte que je redoute le plus ("tu peux pas.")…

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Log d'erreur Tomcat :

    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on token "$", = expected after this token
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on token(s), misplaced construct(s)
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert "AssignmentOperator Expression" to complete Assignment
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert ";" to complete BlockStatements
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on token "}", delete this token
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert ") Statement" to complete IfStatement
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on tokens, EnumHeader expected instead
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on tokens, Expression expected instead
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on token "}", delete this token
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert ")" to complete MethodInvocation
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert ";" to complete Statement
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error on tokens, ( expected instead
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>


    Une erreur s'est produite à la ligne: 28 dans le fichier jsp: /WEB-INF/jspf/tarif.jsp
    Syntax error, insert "AssignmentOperator Expression" to complete Expression
    25: <c:when test="${fn:contains(p.key,'_')}">
    26: <c:set var="psplit" scope="page" value="${fn:split(p.key,'_')}"/>
    27: id personne : ${psplit[1]} , attribut : ${psplit[0]} , valeur : ${param[p.key]} <br/>
    28: <jsp:useBean id="${psplit[1]}" scope="page" class="metier.assure.Personne"/>
    29: <jsp:setProperty name="${psplit[1]}" property="${psplit[0]}" value="${param[p.key]}"/>
    30: </c:when>
    31: <c:otherwise>

  3. #3
    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
    Essaie d'ajouter cette directive dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:directive.page isELIgnored="false"/>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page isELIgnored="false" %>

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Merci de ton attention,

    j'avais oublié de copier cette directive, bien qu'elle soit déjà dans la jsp d'origine… J'ai corrigé mon premier message.

    L'erreur ne vient pas de là, donc

  5. #5
    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
    Après avoir fait un test, je pense qu'il n'est pas possible de mettre une EL dans l'attribut id du tag jsp:useBean, mais ça n'engage que moi.

    Avec le tag suivant dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean id="${propriete}" class="test.Client" scope="session"/>
    le code généré est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test.Client ${propriete} = null;
    synchronized (session) {
       ${propriete} = (test.Client) _jspx_page_context.getAttribute("${propriete}", PageContext.SESSION_SCOPE);
       if (${propriete} == null){
          ${propriete} = new test.Client();
          _jspx_page_context.setAttribute("${propriete}", ${propriete}, PageContext.SESSION_SCOPE);
       }
    }
    ce qui explique les messages d'erreur obtenus.
    Manifestement, il n'y a pas d'interprétation de l'EL.

    Alors qu'avec ce code-là dans la jsp :
    le code généré est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${propriete}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));
    et là, on voit bien qu'il y a un appel à une méthode (proprietaryEvaluate) qui permet d'évaluer l'EL.

    Pour info, j'ai fait le test dans une appli J2EE 1.4 (Servlet 2.4, JSP 2.0) avec un serveur Tomcat 5.5.25.

    Je pense donc que le plus simple est de faire le traitement dans une servlet.

Discussions similaires

  1. [JSP 2.0] Afficher un tableau via les expression language
    Par brainstorm dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 23/06/2006, 16h07
  2. Expression language non active
    Par brainstorm dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 15/06/2006, 15h22
  3. [JSP] Expressions Languages et constantes
    Par Beuss dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/06/2006, 11h03
  4. jsp et librairie de tags <jsp:..>
    Par zais_ethael dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2006, 14h15
  5. [Custom Tags 1.2] Passer une variable comme valeur d'attribut d'un tag jsp
    Par Pi2 dans le forum Taglibs
    Réponses: 7
    Dernier message: 16/09/2005, 14h44

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