[JAVA] Jsp et balise avec corps
finch
-
Utilisateur anonyme -
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.
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
La partie de la classe java du tag :
selectListBrochure.java
Le tld précise le type de la variable :
Caddie.tld
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
-
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 remplacerLIKE ('DIVORCE')parLIKE ('%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, remplacetry { 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