Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°840232
Niala
Posté le 02-09-2004 à 17:18:52  profilanswer
 

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:

mood
Publicité
Posté le 02-09-2004 à 17:18:52  profilanswer
 

n°841033
brisssou
8-/
Posté le 03-09-2004 à 13:43:13  profilanswer
 

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
n°841363
Niala
Posté le 03-09-2004 à 18:31:16  profilanswer
 

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 :)

n°841392
brisssou
8-/
Posté le 03-09-2004 à 18:58:12  profilanswer
 

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

n°841469
Niala
Posté le 03-09-2004 à 20:04:26  profilanswer
 

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.

n°848012
brisssou
8-/
Posté le 12-09-2004 à 11:26:50  profilanswer
 

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.

n°848138
Niala
Posté le 12-09-2004 à 18:03:47  profilanswer
 

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:

n°850785
brisssou
8-/
Posté le 15-09-2004 à 14:54:48  profilanswer
 

Citation :

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


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

n°850967
Niala
Posté le 15-09-2004 à 19:23:32  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[Struts] Je perds la stack trace avec le exception handler[Struts] ActionForm et popup
EXCEL/PHP propriétés non accessibles (PIA?)[Struts] Question sur struts-config.xml[Résolu]
resultats checkbox indexées [résolu][struts]logic:present
[Struts] Nombre variable de paramères dans un form ? comment ?struts ou JSF
urgent: après un assistant d'empaquetage média player marche pasPropriétés 'class' et 'div'
Plus de sujets relatifs à : [Struts] Assistant, propriètés indexées et persistance


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR