JSP/JSTL et passage de variables...(débutant) - Java - Programmation
Marsh Posté le 18-04-2006 à 12:40:12
ReplyMarsh Posté le 18-04-2006 à 16:18:24
ché pas, ton truc on dirait du code de 1997, ça me donne pas super envie de lire
Marsh Posté le 18-04-2006 à 17:15:23
ouai bon c'est pas du struts mais bon ... c'est comme si tu pourrais pas lire un code en C car c'est trop vieux. .
Un petit effort stp
Marsh Posté le 18-04-2006 à 09:32:21
QUESTION 1
----------
pourquoi je n'arrive pas à afficher les propriétés de mon UserBean ?
<%@ page contentType="text/html" import="ecommerce.*,bean.UserBean,java.util.List"
%>
<%@ taglib uri="/jstl/c" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Users</title>
</head>
<body>
<jsp:scriptlet>
IEcommerce ecom = (IEcommerce) application.getAttribute("ecom" );
List users = ecom.listUsers();
pageContext.setAttribute("users",users);
</jsp:scriptlet>
<table border="1">
<c:forEach items="${users}" var="user" varStatus="status" begin="0" end="2">
<tr>
<td><c:out value="${user.login}"></c:out></td>
<td><c:out value="${user.pass}"></c:out></td>
</tr>
</c:forEach>
</table>
</body>
</html>
En fait les instructions
<c:out value="${user.login}">
<c:out value="${user.pass}">
considèrent leur "value" comme une string ... et donc m'affichent "${user.login}" et "${user.pass}" dans leur cellule respective du tableau.
Une idée ?
RQ : en adoptant pour les bon vieux "for" d'une scriptlet, ca marche parfait ! :
...
<body>
<%
IEcommerce ecom = (IEcommerce) application.getAttribute("ecom" );
List<UserBean> users = ecom.listUsers();
%>
<table border="1">
<jsp:scriptlet>
for(UserBean user : users) {
</jsp:scriptlet>
<tr>
<td><%= user.getFirstname()%></td>
<td><%= user.getSurname()%></td>
<td><%= user.getEmail()%></td>
</tr>
<jsp:scriptlet>
}
</jsp:scriptlet>
</table>
</body>
...
QUESTION 2
----------
En fait le code de la RQ de la question 1 marche mais si à la place de "<%...%> je mets "<jsp:scriptlet>...</jsp:scriptlet>
j'obtiens une erreur :
org.apache.jasper.JasperException: /pure_jsps/user.jsp(11,17) Tag <jsp:scriptlet> non terminé
En fait c'est le type paramétré de Java1.5 qui fait planter ("List<UserBean>" à remplacer par "List" ) ... conclusion : JSP 'incompatible' avec Java 1.5
RQ : j'utilise un serveur Tomcat 5.x
QUESTION 3
----------
Comment passer une variable d'une JSP à une servlet ?
...j'ai essaié de mettre dans une JSP des choses du style request.setAttribute() et de faire un request.getAttribute()
dans la servlet qui traite cette page JSP ou bien encore de faire un <jsp:useBean id="userForm" class="bean.UserBean" scope="request">
dans la JSP puis de recupérer dans la servlet avec un request.getAttribute("UserForm" ) mais rien marche, j'ai un pointeur null.
J'ai l'impression de ne pas bien maitriser le passage de variable dans ces applis web .
En fait, pour transmettre des attributs que l'on met dans la request, on doit forcément faire un forward non ?
... parce que ma JSP est juste un formulaire qui attends d'etre soumis par l'internaute.
QUESTION 4
----------
Etant donné mon problème a la question 3, je passe des infos de la JSP à la servlet (lorsque l'internaute soumet le formulaire) a l'aide de test avec la jstl
(<c:if></c:if> )
<jsp:directive.page import="bean.UserBean" contentType="text/html" />
<%@ taglib uri="/jstl/c" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>User Update/Add</title>
</head>
<body>
<%! Boolean isAddAction = false; %>
<jsp:useBean id="userForm" class="bean.UserBean" scope="request">
bean instantiated !<br/>
<% isAddAction = true; %>
</jsp:useBean>
<form method="get" action="servlet">
<p>
login : <input type="text" name="login" value="<%=userForm.getLogin()%>"/><br/>
password : <input type="text" name="pass" value="<%=userForm.getPass()%>"/><br/>
firstname : <input type="text" name="firstname" value="<%=userForm.getFirstname()%>"/><br/>
surname : <input type="text" name="surname" value="<%=userForm.getSurname()%>"/><br/>
email : <input type="text" name="email" value="<%=userForm.getEmail()%>"/><br/>
<input type="hidden" name="id" value="<%=userForm.getId()%>"/><br/>
<input type="hidden" name="page" value="user_update_add"/><br/>
<c:if test="${isAddAction}">
out.write("isAddAction = true" );
<input type="hidden" name="isAddAction" value="true"/><br/>
</c:if>
<c:if test="${not isAddAction}">
out.write("isAddAction = false" );
<input type="hidden" name="isAddAction" value="false"/><br/>
</c:if>
<input type="submit" value="Submit"/>
</p>
</form>
</body>
</html>
Cependant, il n'y a AUCUN passage dans les 2 tests ! (qui sont complémentaires pourtant) ... d"cidément j'ai un pb avec la JSTL .
Aidez-moi