Comment puis-je passer variable de servlet à jsp? setAttribute
et getAttribute
n'a pas fonctionné pour moi :-(
Vous pouvez définir toutes les valeurs dans l'objet de réponse avant de transmettre la demande au jsp. Ou vous pouvez mettre vos valeurs dans un bean de session et y accéder dans le fichier jsp.
Cela ne fonctionnera pas quand:
Vous redirigez la réponse vers une nouvelle requête by response.sendRedirect("page.jsp")
. Bien entendu, le nouvel objet de requête ne contiendra plus les attributs et ceux-ci ne seront pas accessibles dans le JSP redirigé. Vous devez transférer plutôt que rediriger. Par exemple.
request.setAttribute("name", "value");
request.getRequestDispatcher("page.jsp").forward(request, response);
Vous y accédez de manière erronée ou vous utilisez le mauvais nom . En supposant que vous l'ayez défini avec le nom "name"
, vous devriez pouvoir y accéder dans la page JSP forwarded comme suit:
${name}
Manière simple que j'ai trouvé est,
En servlet:
Vous pouvez définir la valeur et la transférer vers JSP comme ci-dessous
req.setAttribute("myname",login);
req.getRequestDispatcher("welcome.jsp").forward(req, resp);
Dans Welcome.jsp, vous pouvez obtenir les valeurs par
.<%String name = (String)request.getAttribute("myname"); %>
<%= name%>
(ou) directement vous pouvez appeler
<%= request.getAttribute("myname") %>.
Utilisation
request.setAttribute ("nom_attribut");
et alors
getServletContext (). getRequestDispatcher ("/ file.jsp"). forward ();
Ensuite, il sera accessible dans le JSP.
En guise de remarque - dans votre jsp, évitez d'utiliser du code Java. Utilisez JSTL.
En plus d'utiliser un attribut pour transmettre les informations d'un servlet à une page JSP, vous pouvez également transmettre un paramètre. Cela se fait simplement en redirigeant vers une URL spécifiant la page JSP en question et en ajoutant le mécanisme normal de transmission des paramètres par l'URL.
Un exemple. La partie pertinente du code de servlet:
protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType( "text/html" );
// processing the request not shown...
//
// here we decide to send the value "bar" in parameter
// "foo" to the JSP page example.jsp:
response.sendRedirect( "example.jsp?foo=bar" );
}
Et la partie pertinente de la page JSP example.jsp
:
<%
String fooParameter = request.getParameter( "foo" );
if ( fooParameter == null )
{
%>
<p>No parameter foo given to this page.</p>
<%
}
else
{
%>
<p>The value of parameter foo is <%= fooParameter.toString() %>.</p>
<%
}
%>
Il s'agit d'un code de servlet contenant une variable de chaîne a. la valeur pour a provient d'une page html avec un formulaire. puis définissez la variable dans l'objet de requête. puis passez-le à jsp en utilisant les méthodes forward
et requestdispatcher
.
String a=req.getParameter("username");
req.setAttribute("name", a);
RequestDispatcher rd=req.getRequestDispatcher("/login.jsp");
rd.forward(req, resp);
dans jsp suivez les étapes indiquées ci-dessous dans le programme
<%String name=(String)request.getAttribute("name");
out.print("your name"+name);%>
Vous pouvez également utiliser RequestDispacher et transmettre les données avec la page jsp souhaitée.
request.setAttribute("MyData", data);
RequestDispatcher rd = request.getRequestDispatcher("page.jsp");
rd.forward(request, response);
Si vous utilisez Action, moyen Actionforward de traiter la logique métier et la page suivante à afficher, vérifiez si la redirection est appelée. Comme beaucoup d'autres l'ont fait remarquer, la redirection ne conserve pas votre demande d'origine car elle vous oblige fondamentalement à faire une nouvelle demande sur le chemin désigné. Ainsi, la valeur définie dans la demande d'origine sera effacée si vous utilisez la redirection au lieu de requestdispatch.
Lorsque vous utilisez setAttribute
et getRequestDispatcher
sur doGet
, assurez-vous que vous accédez à vos pages avec les propriétés urlPatterns ("/ login", par exemple) définies pour votre servlet. Si vous le faites avec "/login.jsp", votre doGet
ne sera pas appelée, aucun de vos attributs ne sera disponible.