[Struts] Assistant, propriètés indexées et persistance

Assistant, propriètés indexées et persistance [Struts] - Java - Programmation

Marsh Posté le 02-09-2004 à 17:18:52    

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.
 
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 :
  1. public class WizardFolderForm extends ActionForm {
  2. /* Informations bénéficiaire + getter et setter correspondant */
  3. ...
  4.     private List listEnfants;
  5.     public WizardFolderForm() {);
  6.         this.initList();
  7.     }
  8.     public List getEnfants() {
  9.         return listEnfants;
  10.     }
  11.     public Enfant getEnfant(int index) {
  12.         return (Enfant) this.listEnfants.get(index);
  13.     }
  14.     public int getNbEnfant() {
  15.         return nbEnfant;
  16.     }
  17.     public void setEnfant(int index, Enfant enfants) {
  18.         this.listEnfants.add(index, enfants);
  19.     }
  20.     public void setEnfants(List enfants) {
  21.         this.listEnfants = enfants;
  22.     }
  23.     public void setNbEnfant(int nbEnfant) {
  24.         this.nbEnfant = nbEnfant;
  25.     }
  26.     public void initList() {
  27.         this.listEnfants = new ArrayList();
  28.    }
  29. }


Code :
  1. public class Enfant {
  2.      private String nom;
  3.      private String prenom;
  4.      private String dateNaissance;
  5.      private String sexe;
  6.    
  7.         public String getSexe() {
  8.             return sexe;
  9.         }
  10.         public void setSexe(String sexe) {
  11.             this.sexe = sexe;
  12.         }
  13.         public String getDateNaissance() {
  14.             return dateNaissance;
  15.         }
  16.         public void setDateNaissance(String dateNaissance) {
  17.             this.dateNaissance = dateNaissance;
  18.         }
  19.         public String getNom() {
  20.             return nom;
  21.         }
  22.         public void setNom(String nom) {
  23.             this.nom = nom;
  24.         }
  25.         public String getPrenom() {
  26.             return prenom;
  27.         }
  28.         public void setPrenom(String prenom) {
  29.             this.prenom = prenom;
  30.         }
  31. }


 
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 :
  1. <html:form action="/gestion/dossier/wizardFolder" focus="numen">
  2. <%--
  3. --%>
  4. <div class="form_gestion">
  5. <%-- Affichage de la 1ère partie de l'assistant--%>
  6. <logic:equal name="wizardFolderForm"  property="currentStep" value="1" >
  7.  <html:hidden property="currentStep" value="1" />
  8.  <nested:iterate id="enfantbean" property="enfants">
  9.   <nested:hidden name="enfantbean" property="nom" indexed="true"/>
  10.   <nested:hidden name="enfantbean" property="prenom" indexed="true"/>
  11.  </nested:iterate>
  12.  <fieldset class="field_gestion">
  13.   <legend><bean:message key="dossier.wizard.beneficiaire.legend" /></legend>
  14.   <p><bean:message  key="dossier.wizard.beneficiaire.intro"/></p>
  15.   <label><bean:message key="dossier.wizard.numen" /></label><html:text property="numen" maxlength="15"/></br>
  16.   <label><bean:message key="dossier.wizard.nom" /></label><html:text property="nom" size="30" /></br>
  17.   <label><bean:message key="dossier.wizard.prenom" /></label><html:text property="prenom" /></br>
  18.   <label><bean:message key="dossier.wizard.sexe" /></label>
  19.     <html:select property="sexe">
  20.      <html:option value="M" />
  21.      <html:option value="F" />
  22.     </html:select>
  23.  </fieldset>
  24.  <fieldset class="field_gestion">
  25.   <legend><bean:message key="dossier.wizard.accompagnement.legend" /></legend>
  26.   <p><bean:message key="dossier.wizard.accompagnement.intro" /></p>
  27.   <label><bean:message key="dossier.wizard.accompagnement.enfant" /></label></br>
  28.     <html:select property="nbEnfant" >
  29.       <html:option value="0"/>
  30.       <html:option value="1"/>
  31.       <html:option value="2"/>
  32.       <html:option value="3"/>
  33.       <html:option value="4"/>
  34.       <html:option value="5"/>
  35.     </html:select>
  36.  </fieldset>
  37.  <html:submit property="action" styleClass="nav" styleId="next">
  38.   <bean:message key="bouton.suivant" />
  39.  </html:submit>
  40. </logic:equal>
  41. <%-- Affichage de la 2eme partie de l'assistant--%>
  42. <logic:equal name="wizardFolderForm"  property="currentStep" value="2" >
  43.  <%-- Les champs suivants sont passés invisible pour garder leurs valeurs pages aprés pages--%>
  44.  <html:hidden property="currentStep" value="2" />
  45.  <html:hidden property="numen" />
  46.  <html:hidden property="nom" />
  47.  <html:hidden property="prenom" />
  48.  <html:hidden property="nbEnfant" />
  49.  <%-- Données pour chacun des enfants--%>
  50.  <nested:iterate id="enfantbean" property="enfants">
  51.   <fieldset class="field_gestion">
  52.    <legend><bean:message  key="dossier.wizard.conjoint.legend" /></legend>
  53.    <label><bean:message key="dossier.wizard.nom" /></label><nested:text name="enfantbean" property="nom" size="30" indexed="true" /></br>
  54.    <label><bean:message key="dossier.wizard.prenom" /></label><nested:text name="enfantbean" property="prenom" indexed="true"/></br>
  55.   </fieldset>
  56.  </nested:iterate>
  57.  <html:submit property="action" styleClass="nav" styleId="previous">
  58.   <bean:message key="bouton.precedent" />
  59.  </html:submit>
  60.  <html:submit property="action" styleClass="nav" styleId="next">
  61.   <bean:message key="bouton.fin" />
  62.  </html:submit>
  63. </logic:equal>
  64. </div>
  65. </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 :jap:

Reply

Marsh Posté le 02-09-2004 à 17:18:52   

Reply

Marsh Posté le 03-09-2004 à 13:43:13    

tu peux récupérer des tableaux de valeurs : http://www.jguru.com/faq/view.jsp?EID=915898


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 03-09-2004 à 18:31:16    

brisssou a écrit :

tu peux récupérer des tableaux de valeurs : http://www.jguru.com/faq/view.jsp?EID=915898


 
Certes mais tableaux ou collections mon problème ne change pas.
 
Dans mon cas, je ne sais pas à l'avance combien j'aurai d'item dans une collection (ou un tableau). Je le sais qu'à la 2ème étape du formulaire :/
 
PS : j'ai peut être pas compris non plus vers quoi tu voulais m'orienter :)

Reply

Marsh Posté le 03-09-2004 à 18:58:12    

en fait, la table que te renverra le tableau n'a pas de taille fixée à l'avance, donc si tu arrives à afficher ton formulaire de saisie d'info le nombre de fois requis, une fois soumis, ton formulaire te rendra des tableaux de valeurs de taille voulue. ici tu auras en fait un seul formulaire répété plusieurs fois...
 
enfin j'ai du mal a te l'expliké, mais ici, pour toi, row ne sert à rien, tes valeurs sont inconnues. au pire, tu peux setter des valeurs par défault avec des constantes...
 
je t'enverrai bien un exemple, mais là, je part en vacances... si t'as pas mieux fin septembre, je t'enverrai un exemple concret.
 
bye

Reply

Marsh Posté le 03-09-2004 à 20:04:26    

brisssou a écrit :

en fait, la table que te renverra le tableau n'a pas de taille fixée à l'avance, donc si tu arrives à afficher ton formulaire de saisie d'info le nombre de fois requis, une fois soumis, ton formulaire te rendra des tableaux de valeurs de taille voulue. ici tu auras en fait un seul formulaire répété plusieurs fois...
 
enfin j'ai du mal a te l'expliké, mais ici, pour toi, row ne sert à rien, tes valeurs sont inconnues. au pire, tu peux setter des valeurs par défault avec des constantes...
 
je t'enverrai bien un exemple, mais là, je part en vacances... si t'as pas mieux fin septembre, je t'enverrai un exemple concret.
 
bye


 
Je viens de relire attentivement le lien que tu m'as donné.  
 
Si je me trompe pas ça t'explique comment récupérer N enregistrements à partir de la base de données (où à partir de ce qu'on veut d'ailleurs) et ensuite de lister chacun des enregistrements de la liste (juste pour visualisation ou pour modification) quelque soit le nombre N.
 
Mon problème à moi est en fait un ailleur (enfin je crois  :sweat:). Il se situe à la création des N enregistrements.  
Pour mon cas, dans la 1er étape je spécifie combien d'enregistrements contient mon ActionForm. Ensuite dans l'action correspondant à mon formulaire je dimensionne ma liste d'enregitrement à la taille voulue et puis j'affiche les N formulaires de saisie.  
Mon seul problème en fait est de pouvoir assurer une persistance des N premiers enregistrements de la liste si, par malheur, l'utilisateur s'est trompé et doit retourner à l'étape précédente (qui entrainera à nouveau un redimensionnement de la liste d'enregistrement).
 
 
Bon c'est peut être pas clair non plus ce que je dis.
Désolé :o
 
 
PS : en essayant d'expliquer mon problème je me demande si je ne devrai pas scinder mon unique ActionForm (même s'il y'a 2 étapes) en 2 ActionForm, en n'oubliant pas de faire transiter l'ActionForm de la 1er étape jusqu'à la fin de l'assistant.

Reply

Marsh Posté le 12-09-2004 à 11:26:50    

je crois qu'on ne se comprends pas, parce qu'avec ce que tu me dis, l'astuce de T. Husted semble convenir parfaitement. Elle te permet de créer un ActionForm contenant N enregistrement, et d'afficher les N champs de saisie. Tu peux ensuite récupérer des tableaux de taille N des données saisies dans ton form. Je vais essaye de t'envoyer un exemple concret.

Reply

Marsh Posté le 12-09-2004 à 18:03:47    

brisssou a écrit :

je crois qu'on ne se comprends pas, parce qu'avec ce que tu me dis, l'astuce de T. Husted semble convenir parfaitement. Elle te permet de créer un ActionForm contenant N enregistrement, et d'afficher les N champs de saisie. Tu peux ensuite récupérer des tableaux de taille N des données saisies dans ton form. Je vais essaye de t'envoyer un exemple concret.


 
Hmm, l'astuce si je me trompe pas te permet d'afficher un nombre variables d'éléments. J'ai pas de soucis de ce côté là :).
 
Bon néanmoins j'ai trouvé il y a 2 jours une solution qui me convient :D.
Pour cela voir ici http://www.keyboardmonkey.com/next/index.jsp et surtout là http://www.keyboardmonkey.com/Stru [...] Struts.jsp pour l'application exemple.
 
Comme tu vois tu peux ajouter ou enlever dynamiquement des éléments dans un ActionForm (une collection de beans qui est donnée membre de l'ActionForm pour être plus précis). Avec le lien que tu m'avais donné je n'avais jamais réussi à obtenir le même résultat :/ (bon je dis pas non plus que c'est la faute au lien :o).
 
Néanmoins je te remercie de mon aide ça m'aura orienté dans mes recherches ;)
 
:hello:

Reply

Marsh Posté le 15-09-2004 à 14:54:48    

Citation :

Néanmoins je te remercie de mon aide ça m'aura orienté dans mes recherches


mais de rien, le plaisir est pour toi ! :)

Reply

Marsh Posté le 15-09-2004 à 19:23:32    

brisssou a écrit :

Citation :

Néanmoins je te remercie de mon aide ça m'aura orienté dans mes recherches


mais de rien, le plaisir est pour toi ! :)


 
:D
 
mais merci quand mm  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed