24 votes

Utilisation de request.setAttribute dans une page JSP

Est-il possible d'utiliser request.setAttribute sur une page JSP, puis sur HTML Submit, on obtient le même attribut de requête dans le fichier Servlet ?

26voto

Phill Sacre Points 16238

Non. Malheureusement, l'objet Request n'est disponible que jusqu'à la fin du chargement de la page. Une fois le chargement terminé, vous perdrez toutes les valeurs qu'il contient, sauf si elles ont été stockées quelque part.

Si vous voulez faire persister des attributs à travers des requêtes, vous devez soit :

  1. Vous avez une entrée cachée dans votre formulaire, telle que <input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" /> . Celle-ci sera ensuite disponible dans la servlet comme paramètre de requête.
  2. Mettez-le dans la session (voir request.getSession() - dans une JSP, cela est disponible simplement comme session )

Je recommande d'utiliser la session car elle est plus facile à gérer.

4voto

Halfgaar Points 7731

La réponse de Phil Sacre était correcte, mais la session ne devrait pas être utilisée juste pour le plaisir. Vous ne devez l'utiliser que pour les valeurs qui vraiment doivent vivre pendant toute la durée de la session, comme la connexion d'un utilisateur. Il est fréquent de voir les gens surutiliser la session et rencontrer d'autres problèmes, en particulier lorsqu'il s'agit d'une collection ou lorsque les utilisateurs reviennent sur une page qu'ils ont déjà visitée et découvrent qu'il reste des valeurs d'une visite précédente. Un programme intelligent minimise autant que possible la portée des variables, un mauvais programme utilise trop la session.

4voto

connect2krish Points 11

Si vous voulez que vos demandes persistent, essayez ceci :

exemple : sur votre page JSP ou servlet

request.getSession().setAttribute("SUBFAMILY", subFam);

et sur n'importe quelle page de réception, utilisez les lignes ci-dessous pour récupérer votre session et vos données :

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");

4voto

Prasad Points 43

Vous pouvez cependant le faire en utilisant les attributs pageContext :

Dans la JSP :

<form action="Enter.do">
    <button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button>
</form>
<% String s="opportunity";
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %>

Dans la servlet (liée au modèle d'url "Enter.do") :

String s=(String) request.getServletContext().getAttribute("opp");

Il existe d'autres scopes que APPLICATION_SCOPE, comme SESSION_SCOPE. APPLICATION_SCOPE est utilisé pour les attributs de ServletContext.

2voto

Lino Points 11

Essayez

request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X