Bonjour Tchize_
tu dis que mon code est alambiqué, et j'apprécie ton indulgence ^^
En réalité, sur ce petit exemple, je me retrouve bloqué avec 2 petits problèmes qui expliquent pourquoi j'en suis arrivé là :
- au départ, je souhaitais récupérer les paramètres directement dans la JSP au travers des expressions implicites (telles que ${header} ou ${request}), mais je ne parvenais pas à itérer directement dans la JSP sur les paramètres de la requête. J'ai donc réalisé cela dans la servlet qui appelle la page.
- ensuite, dans la servlet, j'ai créé une HashMap dans laquelle j'ai rapatrié les paramètres de la requête ainsi :
1 2 3
|
HashMap<String,String> requestParams = new HashMap<String,String>();
requestParams = (HashMap) request.getParameterMap(); |
Ensuite j'ai itéré sur cette Map pour obtenir les couples clés/valeurs que je cherchais, mais j'ai eu un soucis :
- la clé ressortait bien sous forme de String
- la valeur correspondante était affichée sous forme de référence
Comme je ne parvenais pas à obtenir une String avec ma "value", j'ai contourné le problème avec ce cast :
request.getParameter((String)couples.getKey())
Je renvoie alors le tout dans une autre HashMap que je transmets pour affichage à la JSP.
Voilà le doGet() complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
final String ACCUEIL = "/page.jsp";
/**
* @requestParams HashMap stockant les paramètres de la requête
*/
HashMap<String,String> requestParams = new HashMap<String,String>();
HashMap<String,String> paramsOut = new HashMap<String,String>();
requestParams = (HashMap) request.getParameterMap();
System.out.println("Nb de paramètres : " + requestParams.size());
Iterator<Map.Entry<String,String>> it = requestParams.entrySet().iterator();
Iterator<Map.Entry<String,String>> itOut = paramsOut.entrySet().iterator();
while(it.hasNext()) {
Map.Entry couples = (Map.Entry)it.next();
paramsOut.put((String) couples.getKey(), request.getParameter((String)couples.getKey()));
System.out.println("Clé = " + couples.getKey() + " / Valeur = " + request.getParameter((String)couples.getKey()));
}
request.setAttribute("Params", paramsOut);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(ACCUEIL);
dispatcher.forward(request,response);
} |
Donc oui, tu as raison, c'est alambiqué parce qu'il y a 2 couches qui se superposent alors que ce n'était pas prévu comme ça au départ. J'envisageais plutôt quelque chose comme ce que tu m'as proposé pour être honnête ^^
En tout cas, merci pour ton aide.
PS : saurais-tu m'expliquer comment faire la même chose avec l'objet implicite de la JSP ?
++
Partager