Bonjour,
Je travaille actuellement sur un projet avec Spring MVC.
J'ai l'enchainement de pages suivant pour réaliser une recherche en base LDAP
sur des personnes:
page 1 : recherchePersonne.jsp
Sélection de mes personnes.
deux champs de saisie nom et prenom.
Un bouton de validation lance la recherche et me dirige sur la page 2.
page 2 : resultatRecherchePersonne.jsp
Tableau présentant les personnes trouvées.
Chaque ligne du tableau dispose d'une checkbox permettant de sélectionner les
personnes effectivement "intéressantes" dans le cadre de la recherche.
page 3 : resultatSelectionPersonne.jsp
Tableau présentant les personnes sélectionnées.
Ces trois pages sont gérées par un controller de type AbstracWizardFormController
qui permet de gérer l'enchainement en gardant notamment l'objet "modèle" associé
à chaque page jsp en session. Cet objet modèle est un bean associé au controller
dans le fichier monProjet-servlet.xml de la façon suivante :
Cette classe contient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <property name="commandClass" value="monProjet.monPackage.PersonneEtListePersonne"/> <property name="commandName" value="personneEtListePersonne" /> <property name="sessionForm" value="true" />
un attribut = objet Personne
+ deux ArrayList d'objets Personne:
listePersonnesTrouvees
listesPersonnesSelectionnees
De plus, toujours dans ce même fichier, j'autorise la personne à naviguer
dans l'assistant sans validation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <property name="allowDirtyBack" value="true"/> <property name="allowDirtyForward" value="true" />
Sur la page 3, à partir des personnes sélectionnées, l'utilisateur pourra éditer
au format désiré cette liste. Plusieurs liens href lui permettent d'accéder à
des pages de paramétrage. Notamment une qui va lui permettre de sélectionner les
attributs (comme nom, prenom, age, organisme, fonction, etc...) qu'il veut voir
apparaitre dans le rapport à éditer.
Cette page "selectAttributs.jsp" (on va dire page 4)se présente sous forme
d'un tableau, listant les attributs accessibles.
Les attributs qui seront utilisés dans le rapport doivent
être cochés par l'utilisateur. Une fois la sélection d'attributs faite (cases
cochées), l'utilisateur, en cliquant sur "valider" revient sur la page des personnes
sélectionnées.
La page "selectAttributs.jsp" est gérée par un simpleFormController
(elle ne fait pas partie du workflow obligatoire et ne rentre donc pas dans
l'enchainement géré par le AbstractWizardFormController). Le retour sur la page 3
(resultatSelectionPersonne.jsp) se fait de la façon suivante (géré automatiquement par
Spring MVC) :
Le "modèle" objet associé à ma page 4 (de la même façon que ci-dessus dans le fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4<property name="successView"> <value>resultatSelectionPersonne</value> </property>
monProjet-servlet.xml) est une ArrayList d'objets "AttributPersonne"
Problème 1, résolu mais qui annonce le problème 2 :
Lorsque je passe de la page 3 à la page 4, l'objet personneEtListePersonne est
perdu de la session, sur retour vers la page 3, ma page ne s'affiche plus et
j'ai une exception levée. Je suis obligé de le mettre en session, le récupérer dans mon
simpleFormController (methode formBackingObject) sous le nom toto et sur la validation de la page 4
(methode onSubmit) faire ce qui suit :
Problème 2(et qui fait l'objet de ma question) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 vModeleEtVue.setViewName("resultatSelectionPersonne"); vModeleEtVue.addObject("personneEtListePersonne", toto); return vModeleEtVue;
Je reviens bien sur ma jsp resultatSelectionPersonne.jsp, elle affiche bien
mes personnes sélectionnées, je récupère bien les attributs sélectionnés en
session mais je ne peux plus naviguer entre mes pages 1, 2 et 3. J'ai l'impression
que le contexte de mon AbstractWizardFormController est perdu. En cliquant
sur précédent je reste sur ma page 3.
Avez-vous déjà rencontré ce problème, et bien sûr avez vous une solution à
me proposer? Merci par avance.
Partager