Bonjour,
Je vais essayer de vous expliquer clairement mon problème.
j'ai un formulaire qui contient une liste déroulante (une liste de personne)et une champ texte (un numéro de téléphone). Les données de ses deux éléments sont liés, ainsi lorsque l'utilisateur choisi une personne de la liste déroulante, je voudrais que le téléphone soit automatiquement mis à jour.
voici le code (épuré) de ma JSP :
et voici une partie du code de la servlet qui gère l'affichage de cette JSP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <% Collection listePersonne = (Collection) request.getAttribute("listePersonnes");%> <bean:define id="personne" name="beanPersonne" scope="request" type="bean.BeanPersonne"/> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" href="/style/style.css" type="text/css"> </head> <form action="/servlet/AdministrerPersonne" method="post" onsubmit="return false;"> <table border="0" cellspacing="0"> <tr> <td width="10"> </td> <td align="right" class="text">Personnel</td> <td width="10"> </td> <td class="text"> <html:select name="personne" property="code" onchange="this.form.submit();"> <%Iterator it = listePersonne.iterator(); while (it.hasNext()){ BeanPersonne bean = (BeanPersonne) it.next(); if (bean.getId()==personne.getId()){%> <option selected="true" value= <%= bean.getCode() %> ><%=bean.getLabel() %></option> <%}else{ %> <option value= <%= bean.getCode() %> ><%=bean.getLabel() %></option> <%} }%> </html:select> </td> </tr> <tr> <td width="10" height="50"> </td> <td align="right" class="text">Téléphone</td> <td width="10"> </td> <td class="text"> <logic:present name="personne" property="telephone"> <input type="text" name="telephone" value="<%= personne.getTelephone() %>" maxlength="15"> </logic:present> <logic:notPresent name="personne" property="telephone"> <input type="text" name="telephone" maxlength="15" size="20" > </logic:notPresent> </td> </tr> </table>
Comme vous pouvez le voir, dans ma servlet, je récupère une liste de toutes les personnes existantes, puis je définis une personne par défault (BeanPersonne personne) que j'affiche dans mon formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public void doTask(HttpServletRequest request, HttpTaskTarget target){ //Récupération de la liste des Personnes Collection listePersonnes = GererPersonnes.getInstance().getPersonnes(); request.setAttribute("listePersonnes", listePersonnes); //Création d'un beanPersonne par défaut String code = request.getParameter("code"); BeanPersonne personne ; //récupération du beanPersonne de la requete s'il existe, //sinon, création d'un beanPersonne à partir de listesPersonne if (code == null || code.equals("")){ personne = (BeanPersonne) listePersonnes.iterator().next(); }else{ personne = GererPersonne.getInstance().getPersonne(code); } request.setAttribute("beanPersonne", personne);
Si l'utilisateur sélectionne une autre personne dans la liste déroulante, je renvoie la requete coté servlet (<html:select name="personne" property="code" onchange="this.form.submit();">) pour récupérer le beanPersonne correspondant et afficher son bon numéro de téléphone.
Cependant, je trouve cette méthode un peu "lourde" de devoir repasser coté servlet pour afficher mon numéro de téléphone, alors que je l'ai dans ma JSP dans mon objet "listePersonne". Le problème, c'est que je ne sais pas comment le récupérer sur un changement de ma liste déroulante.
Auriez vous une piste à me donner ? merci
PS : je suis débutante en servlet/JSP, aussi, je m'excuse d'avance si je n'emploie pas les bons termes dans mes explications ou si vous voyez des horreurs dans mon code ^^ Si vous avez des critiques à faire, n'hésitez pas !!
Partager