[JAVA] Jsp et balise avec corps

finch -  
 Utilisateur anonyme -
Salut à tous!

J'ai un problème avec les balises avec corps et les jsp.
Je dois insérer la requête dans le corps de la balise.

…
<caddie.selectListBrochure>

            SELECT * FROM brochures WHERE categorie LIKE 'DIVORCE';

</caddie.selectListBrochure>  
…
<% while(rs.next()) { %>
…


Mais le jsp ne détecte pas la variable « rs » lors du rs.next() (« cannot find symbol symbol : variable rs »).
rs instancie la classe ResultSet. C'est objet conçu dans la classe du Tag a partir de la requête dans le corps.

J'ai suivit les examples du prof dans son livre. On a regardé avec d'autres étudiants qui y arrive...mais personne n'a trouvé le problème :aie:

Voilà les extraits du code (sous NetBeans 5.5 ):

Le Jsp :

AffichageBrochure.jsp

…
<%@taglib uri="/WEB-INF/tlds/caddie.tld" prefix="caddie"%>
…
<caddie.selectListBrochure>

            SELECT * FROM brochures WHERE categorie LIKE 'DIVORCE';

</caddie.selectListBrochure>  
...
<% while(rs.next()) { %>
…


La partie de la classe java du tag :

selectListBrochure.java


…
private void writeTagBodyContent(JspWriter out, BodyContent bodyContent) throws IOException {

        String requete = bodyContent.getString();

        ResultSet rs = null;

        try {
            rs = instruc.executeQuery(requete);
            pageContext.setAttribute("rs",rs);
        } catch(SQLException e) {
            arret=true;
        }
        bodyContent.writeOut(out);
        bodyContent.clearBody();
    }

…


Le tld précise le type de la variable :

Caddie.tld

…
  <tag>
    <name>selectListBrochure</name>
    <tag-class>caddie.selectListBrochure</tag-class>
    <body-content>JSP</body-content>
    <variable>
        <name-given>rs</name-given>
        <variable-class>java.sql.ResultSet</variable-class>
        <declare>true</declare>
        <scope>AT_END</scope>
    </variable>
  </tag>
…
Configuration: Windows XP
Firefox 2.0.0.1

1 réponse

  1. Utilisateur anonyme
     
    Salut !

    A première vue, le code de ton custom tag est correctement écrit.

    Je pense que l'erreur provient de ta requête SQL.

    Dans ta requête SQL, tu dois peut-être remplacer
    LIKE ('DIVORCE')
    par
    LIKE ('%DIVORCE%')
    ou quelque chose de semblable.

    Si ta requête est correcte, c'est qu'il y a un problème durant l'exécution de celle-ci.
    Afin de la détecter, remplace
            try {
                rs = instruc.executeQuery(requete);
                pageContext.setAttribute("rs",rs);
            } catch(SQLException e) {
                arret=true;
            }
    

    par:
            try {
                rs = instruc.executeQuery(requete);
                pageContext.setAttribute("rs",rs);
            } catch(SQLException e) {
                arret=true;
                e.printStackTrace();
            }
    


    Tu verras alors si c'est à cet instant que survient l'erreur et tu pourras débuguer en utilisant les infos du stacktrace (peut-être un problème de connexion à ta base de données?)

    Si l'erreur ne provient pas de là, c'est que ta requête renvoie "null".

    Pour éviter que cela ne "plante" ton application, remplace:

    <caddie.selectListBrochure>
    
                SELECT * FROM brochures WHERE categorie LIKE 'DIVORCE';
    
    </caddie.selectListBrochure>  
    ...
    <% while(rs.next()) { %>
    …
    


    par:
    <caddie.selectListBrochure>
    
                SELECT * FROM brochures WHERE categorie LIKE 'DIVORCE';
    
    </caddie.selectListBrochure>  
    ...
    <% 
        if(rs!=null){
          while(rs.next()) {
            …
          }
        }else{
          ...
        }
    %>
    


    ;-)
    HackTrack
    1