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
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