Bonjour à tous,
C'est mon premier post ici, alors merci d'avance pour votre indulgence et bien sûr pour votre aide
Je travaille sur la maintenance d'une application web dont l'architecture technique MVC struts et qui utilise des beans et des JSP (+ hibernate pour la persistance)
Dans ce cadre, je mets en place un formulaire contenant une dizaine de champs texte.
L'un des champs texte est associé est associé à un bouton "rechercher", réalisant une validation partielle du formulaire : L'utilisateur saisit un ID dans le champ texte, puis clique sur le bouton "rechercher". Ceci déclenche une action de recherche en base puis affiche le nom de l'élément si l'ID saisi existe ou un message d'avertissement dans le cas contraire.
Enfin, le formulaire comporte un bouton de validation générale, destiner à créer et enregistrer une entité avec les éléments renseignés.
Ma problématique est de conserver l'affichage des données déjà saisies par l'utilisateur, lorsque celui-ci clique sur le bouton "rechercher".
Bien sûr, il est possible dans ma classe Action de récupérer puis de renvoyer explicitement la valeur de chaque champ saisi, comme ci-dessous pour les 2 champs comment et interloc:
Mais cela me semble tellement peu élégant que ce n'est certainement pas comme ça qu'il faut faire
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 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = SessionManager.getSession(request); // log.info("session: "+session); if (session == null) return mapping.findForward("login"); ClientData user = (ClientData) session.getAttribute("ClientData"); ManagerServiceImpl service = new ManagerServiceImpl(); ValueObject vo = new ValueObject(); // -------------------------------------------------------------- // Récupération des paramètres HTTP String numtel = request.getParameter("numtel"); String interloc= request.getParameter("interloc"); // [...] request.setAttribute("numtel", numtel); request.setAttribute("interloc", interloc); return mapping.findForward("success"); }
De plus, dans le code que je maintiens, un des champs, nommé "comment" est bien réaffiché après un clic sur "rechercher", bien que je ne passe pas explicitement sa valeur à la requête via setAttribute, comme je le fais ci-dessus pour "numtel" et "interloc".
Il y a donc visiblement un mécanisme "automatique" (je veux dire du framework) qui fonctionne avec ce champ comment, ce que je vois d'ailleurs au débugger, puisque je passe dans les getter/setter de comment via du code du framework)
Pourtant, les 3 champs comment, numtel et interloc sont des attributs de mon bean et dotés des getters/setters adéquats. La différence entre eux se situe dans ma JSP et je suis sûre que c'est là que se situe mon problème, mais je ne connais pas suffisamment la syntaxe jsp pour le résoudre :
D'abord, le code du champ "comment", qui se comporte bien :
Puis le code de interloc, par exemple, qui ne déclenche pas les setters/getters et qui donc est perdu lors de la validation partielle de ma page si je ne passe pas explicitment sa valeur à la requête comme je le fais ci-dessus ma méthode executeAction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <tr> <td><%=labels.getString("detail.comment")%>:</td> <td><html:textarea property="comment" cols="40" rows="3" styleClass="width100">${comment}</html:textarea><br /> </td> </tr>
Voilà donc une longue question pour un point sûrement un peu bête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <tr> <td><%=labels.getString("workorder.my.interloc")%>:</td> <td><input type="text" name="interloc" value="${interloc}" /><br /></td> </tr>, mais j'essaye d'être la plus claire possible...
Comment devrais-je déclarer mon champ interloc dans la jsp afin qu'il ne soit pas reseté lors du réaffichage de la page qui suit le "rechercher" ?
Grand merci d'avance pour vos lumières !
J.
Partager