JSP et tag perso

JSP et tag perso - Java - Programmation

Marsh Posté le 08-05-2006 à 17:40:47    

Bonjour,
 
J'essaie de créer un bête tag qui simule un <c: out />.
Je veux donc pouvoir afficher une valeur en faisant : <perso:afficher value="${maValeur} />
 
Voici les différents fichiers que j'ai :
 
    perso.tld

...
    <tag>
        <name>afficher</name>
        <tag-class>tags.Afficher</tag-class>
        <attribute>
            <name>value</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>
    </tag>
...


    Afficher.java

Code :
  1. ...
  2. public class Afficher extends TagSupport {
  3.     private String value;
  4.     private JspWriter out;
  5.     public int doStartTag() throws JspException {
  6.         out = pageContext.getOut();
  7.         try {
  8.             out.print(value);
  9.         } catch (IOException e) {
  10.             // TODO Auto-generated catch block
  11.             e.printStackTrace();
  12.         }
  13.         return SKIP_BODY;
  14.     }
  15.     public void setValue(String value) {
  16.         this.value = value;
  17.     }
  18. }


 
    Et la JSP avec laquelle je teste :

Code :
  1. <%@ page language="Java" import="java.util.*" %>
  2. <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
  3. <%@ taglib uri="http://perso" prefix="perso" %>
  4. <c:forEach var="maValeur" begin="1" end="5">
  5.     <c:out value="${maValeur}" /> = <perso:afficher value="${maValeur}" />
  6.     <br/>
  7. </c:forEach>



    Voici ce que j'obtiens dans mon navigateur :

1 = ${maValeur}
2 = ${maValeur}
3 = ${maValeur}
4 = ${maValeur}
5 = ${maValeur}


 
Le problème est donc que le contenu de mon attribut "value" (ici une EL) n'est pas interpreté (alors qu'avec la balise c: out, oui).
J'ai essayé de passer le "rtexprvalue" à true dans mon tld, mais ça ne change rien (et de toute façon d'après ce que j'ai lu, ça ne sert pas à ça).
Quelqu'un aurait une idée ?


Message édité par _john_doe_ le 08-05-2006 à 17:41:46
Reply

Marsh Posté le 08-05-2006 à 17:40:47   

Reply

Marsh Posté le 08-05-2006 à 17:52:42    

ben             <rtexprvalue>true</rtexprvalue>  
devrait le faire. t'as bien déclaré ton tld en jsp2.x ?
(ou 1.2 ché plus quand les el ont été ajoutées)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-05-2006 à 19:34:48    

the real moins moins a écrit :

ben             <rtexprvalue>true</rtexprvalue>  
devrait le faire. t'as bien déclaré ton tld en jsp2.x ?
(ou 1.2 ché plus quand les el ont été ajoutées)


 
D'après ce que j'ai compris, le rtexprvalue c'est seulement pour pouvoir utiliser des scriplets, par exemple :

<perso:afficher value="<%=maValeur%>" />


 
Ensuite, j'ai regarder le tld du taglib core, et l'attribut value de c: out a un rtexprvalue qui vaut false, alors qu'on peut lui passer des valeurs comme ${maValeur}.
 
Et enfin, je suis en JSP1.2 (pas le choix), mais je pense pas que le problème vienne de là puisque le c: out fonctionne correctement.
 
Je sens que je suis pas prêt d'avoir ma réponse :(


Message édité par _john_doe_ le 08-05-2006 à 19:36:05
Reply

Marsh Posté le 08-05-2006 à 19:46:47    

oui mais le c:out que tu utilises en 1.2 il fait le parsing de l'el lui-même.
tu sais que tu peux mater le code hein, c'est open source [:mlc] [:mlc] [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-05-2006 à 19:52:43    

Justement j'ai regardé, et je pige pas comment il récupère la valeur passée dans l'attribut value (y'a pas de méthode setValue()).
Et, en tout cas dans la classe OutSupport.java, j'ai trouvé aucune trace d'une quelconque analyse de l'EL.


Message édité par _john_doe_ le 08-05-2006 à 19:54:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed