Bonjour à tous.
Je réalise actuellement une application web J2EE avec le framework struts.
J'essai de réaliser un formulaire scindé en 2 étapes :
- dans la 1er, l'utilisateur est invité à entrer ses informations personnelles (nom, prénom, etc) ainsi que le nombre d'enfants à sa charge.
- dans la 2e, je souhaite, selon le nombre d'enfants renseigné, proposr n fois (sur la même page l'un à la suite de l'autre) un formulaire de saisie des informations de l'enfant.
Bon évidement si je viens sur ce forum c'est que j'y arrive pas .
D'un point de vue technique, un seul fichier jsp est chargé à la fois des 2 étapes.
Les données du formulaire sont contenue dans un ActionForm qui ressemble à ça :
Code :
- public class WizardFolderForm extends ActionForm {
- /* Informations bénéficiaire + getter et setter correspondant */
- ...
- private List listEnfants;
- public WizardFolderForm() {);
- this.initList();
- }
- public List getEnfants() {
- return listEnfants;
- }
- public Enfant getEnfant(int index) {
- return (Enfant) this.listEnfants.get(index);
- }
- public int getNbEnfant() {
- return nbEnfant;
- }
- public void setEnfant(int index, Enfant enfants) {
- this.listEnfants.add(index, enfants);
- }
- public void setEnfants(List enfants) {
- this.listEnfants = enfants;
- }
- public void setNbEnfant(int nbEnfant) {
- this.nbEnfant = nbEnfant;
- }
- public void initList() {
- this.listEnfants = new ArrayList();
- }
- }
|
Code :
- public class Enfant {
- private String nom;
- private String prenom;
- private String dateNaissance;
- private String sexe;
-
- public String getSexe() {
- return sexe;
- }
- public void setSexe(String sexe) {
- this.sexe = sexe;
- }
- public String getDateNaissance() {
- return dateNaissance;
- }
- public void setDateNaissance(String dateNaissance) {
- this.dateNaissance = dateNaissance;
- }
- public String getNom() {
- return nom;
- }
- public void setNom(String nom) {
- this.nom = nom;
- }
- public String getPrenom() {
- return prenom;
- }
- public void setPrenom(String prenom) {
- this.prenom = prenom;
- }
- }
|
Pour le moment, j'arrive, à partir de la 1er étape, à afficher N fois (la valeur N étant saisie à l'étape précédent) le formulaire de saisie des informations de l'enfant (en utilisant les indexed properties et les tags <nested:iterate> et <nested:text> du framework struts).
Mon problème se situe dans la persistence des données de la collection listEnfants.
Par exemple, quand j'entre les données des enfants à la 2e étape,et que je reviens à la 1er étape :
- d'abord les champs <nested:hidden> correspondant à listEnfants s'ils s'affichent correctement, ne sont pas renseignés (vide).
- en conséquence, quand je reviens à la 2e étape, les champs sont également vides.
Voici un aperçu de ma jsp chargée de l'assistant
Code :
- <html:form action="/gestion/dossier/wizardFolder" focus="numen">
- <%--
- --%>
- <div class="form_gestion">
- <%-- Affichage de la 1ère partie de l'assistant--%>
- <logic:equal name="wizardFolderForm" property="currentStep" value="1" >
- <html:hidden property="currentStep" value="1" />
- <nested:iterate id="enfantbean" property="enfants">
- <nested:hidden name="enfantbean" property="nom" indexed="true"/>
- <nested:hidden name="enfantbean" property="prenom" indexed="true"/>
- </nested:iterate>
- <fieldset class="field_gestion">
- <legend><bean:message key="dossier.wizard.beneficiaire.legend" /></legend>
- <p><bean:message key="dossier.wizard.beneficiaire.intro"/></p>
- <label><bean:message key="dossier.wizard.numen" /></label><html:text property="numen" maxlength="15"/></br>
- <label><bean:message key="dossier.wizard.nom" /></label><html:text property="nom" size="30" /></br>
- <label><bean:message key="dossier.wizard.prenom" /></label><html:text property="prenom" /></br>
- <label><bean:message key="dossier.wizard.sexe" /></label>
- <html:select property="sexe">
- <html:option value="M" />
- <html:option value="F" />
- </html:select>
- </fieldset>
- <fieldset class="field_gestion">
- <legend><bean:message key="dossier.wizard.accompagnement.legend" /></legend>
- <p><bean:message key="dossier.wizard.accompagnement.intro" /></p>
- <label><bean:message key="dossier.wizard.accompagnement.enfant" /></label></br>
- <html:select property="nbEnfant" >
- <html:option value="0"/>
- <html:option value="1"/>
- <html:option value="2"/>
- <html:option value="3"/>
- <html:option value="4"/>
- <html:option value="5"/>
- </html:select>
- </fieldset>
- <html:submit property="action" styleClass="nav" styleId="next">
- <bean:message key="bouton.suivant" />
- </html:submit>
- </logic:equal>
- <%-- Affichage de la 2eme partie de l'assistant--%>
- <logic:equal name="wizardFolderForm" property="currentStep" value="2" >
- <%-- Les champs suivants sont passés invisible pour garder leurs valeurs pages aprés pages--%>
- <html:hidden property="currentStep" value="2" />
- <html:hidden property="numen" />
- <html:hidden property="nom" />
- <html:hidden property="prenom" />
- <html:hidden property="nbEnfant" />
- <%-- Données pour chacun des enfants--%>
- <nested:iterate id="enfantbean" property="enfants">
- <fieldset class="field_gestion">
- <legend><bean:message key="dossier.wizard.conjoint.legend" /></legend>
- <label><bean:message key="dossier.wizard.nom" /></label><nested:text name="enfantbean" property="nom" size="30" indexed="true" /></br>
- <label><bean:message key="dossier.wizard.prenom" /></label><nested:text name="enfantbean" property="prenom" indexed="true"/></br>
- </fieldset>
- </nested:iterate>
- <html:submit property="action" styleClass="nav" styleId="previous">
- <bean:message key="bouton.precedent" />
- </html:submit>
- <html:submit property="action" styleClass="nav" styleId="next">
- <bean:message key="bouton.fin" />
- </html:submit>
- </logic:equal>
- </div>
- </html:form>
|
Ça fait 3 jours que je galère là dessus donc je viens demander votre aide.
Est-il possible dans mon cas, de créer dynamiquement des occurences dans listEnfants (à la 2e étape) tout en gardant la persistance des données à travers les étapes (pour éviter de retaper les infos)?
Pensez vous que ma manière de procéder est la bonne? Sinon comment faire alors pour avoir le même résultat?
Merci de votre aide et surtout d'avoir lis jusqu'à bout