[JAVA] Jsp et balise avec corps

Fermé
finch - 18 janv. 2007 à 11:22
 Utilisateur anonyme - 22 janv. 2007 à 12:02
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>
…
A voir également:

1 réponse

Utilisateur anonyme
22 janv. 2007 à 12:02
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