IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Problème]Nombre et nom des champs dynamiques dans un form


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut [Problème]Nombre et nom des champs dynamiques dans un form
    Bonjour,

    La je suis bloqué !
    J'ai un formulaire dont le nombre de champs varie c'est a dire qu'il y a une fonction javascript qui ajoutes des variables (date1,nom1, puis date2, nom2 ....)

    Donc avec Struts je ne voit pas comment créer une classe form qui sera capable de contenir l'ensemble de mes variables.

    Une piste ?

  2. #2
    Membre habitué Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Points : 177
    Points
    177
    Par défaut
    Bonjour,

    peut-être en le faisant à la main :
    récuperer les paramètres dans le contrôleur (avec servletRequest.getParameter("date"+i) et remplir un Vector dans ton ActionForm.

  3. #3
    Membre habitué Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Points : 177
    Points
    177
    Par défaut
    J'ajoute une petite précision: un servletRequest.getParameter(String) sur un élément qui n'existe pas retourne la valeur 'null'.

  4. #4
    zag
    zag est déconnecté
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 75
    Points
    75
    Par défaut
    slt,

    tu peux aussi passer par une map.
    Il te suffit pour cela de déclarer un champ de type Hashmap ds ton form(appelons le "dynaChamp"), de mettre name="dynaChamp('date1')",name="dynaChamp('nom1')" pour les différents éléments de ton formulaire dans ta jsp.
    Par la suite dans ton controleur, tu n'as plus qu'a faire un Hashmap dynaChamp=form.getDynaChamp, et à récupérer les différentes valeurs settées dans ta jsp en faisant des dynaChamp.get('date1'), dynaChamp.get('nom1').

    rq : les valeurs que tu récupères dans ta map seront toutes des String

    Voila, j'espère que ca pourra t'aider

    a+

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Bon je vais voir, le contrôleur je ne l'ai jamais utilisé sous Struts ! Va falloir que je buche !
    Si j'ai une solution viable je la publierai mais c'est pas gagné

  6. #6
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    +1 avec zag. Tu dois passer par une hashmap.


    Comme ca, ca na rien de super compliquer:

    tu declares (dans ton form) une methode getXyyyy(String s) et setXyyyy(String s, Object o).

    Et dans ta jsp tu fait par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text name="fieldForm" property="xyyyyy('date1')" />

    Attention a bien faire attention aux majuscules et minuscules.
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    OK !
    c'est vrai que la hashmap est une solution a laquelle je n'avais pas pensé !
    J'avoue

    Merci

  8. #8
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Voila mon form :

    package mgpat.workflow.prevoyance.form;

    import java.util.HashMap;
    import java.util.TreeMap;

    import org.apache.struts.action.ActionForm;

    public class FicheInvalForm extends ActionForm {

    //TreeMap<String, String> mapVariable = new TreeMap<String, String>();
    HashMap<String, String> mapVariable = new HashMap<String, String>();

    /**
    * @return the mapVariable
    */
    public String getMapVariable(String s) {
    return mapVariable.get(s);
    }

    /**
    * @return the mapVariable
    */
    public HashMap<String,String> getMapVariable() {
    return mapVariable;
    }

    /**
    * @param mapVariable the mapVariable to set
    */
    public void setMapVariable(String mapVariable, String o) {
    System.out.println("Variable mise ne memoire");
    this.mapVariable.put(mapVariable, o);
    }



    }
    Voila mon action :

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {

    FicheInvalForm formInval = (FicheInvalForm)form;
    HashMap<String, String> map = formInval.getMapVariable();

    Set set = map.keySet();
    Iterator it = set.iterator();


    System.out.println("*********** Lecture des variables");
    while(it.hasNext())
    {
    String cles = (String)it.next();
    System.out.println("*********** "+cles);
    System.out.println("*********** "+map.get(cles));
    }

    return mapping.findForward("ok");
    }

    Pas de plantage mais aucune variable n'est remplie !!!!!!!!!!!
    Il n'appel même pas la fonction setMapVariable

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Suggestion :

    Regarde Struts-Layout et Datagrid, c'est exactement le truc pour toi...

    http://struts.application-servers.co...rid/index.html

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Citation Envoyé par julienOriano
    Pas de plantage mais aucune variable n'est remplie !!!!!!!!!!!
    Il n'appel même pas la fonction setMapVariable

    As tu essayés d'implémenter la méthode setMapVariable comme je te l'ai proposé (voir mon dernier post pour les parametres)?
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  11. #11
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Ce n'est pas le cas ?
    Il me semble l'avoir implémenté comme toi

  12. #12
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Citation Envoyé par maxf1
    Tu dois passer par une hashmap.


    Comme ca, ca na rien de super compliquer:

    tu declares (dans ton form) une methode getXyyyy(String s) et setXyyyy(String s, Object o)
    Citation Envoyé par julienOriano

    public void setMapVariable(String mapVariable, String o) {
    System.out.println("Variable mise ne memoire");
    this.mapVariable.put(mapVariable, o);
    }
    Et sinon montre ta jsp
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  13. #13
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Aucune différence entre nos deux codes (j ai même doutés à un moment et j'ai tenté avec la classe Object au lieu de String mais cela ne fonctionne pas quand même!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <body>
    	<html:form action="/validerFiche.jspa" method="post">
    		<html:text  property="mapVariable('date1')" /><br/>
    		<html:text  property="mapVariable('nom1')" /><br/>
    		<html:text  property="mapVariable('date2')" /><br/>
    		<html:text  property="mapVariable('nom2')" /><br/>
    		<html:text  property="mapVariable('date3')" /><br/>
    		<html:text  property="mapVariable('nom3')" /><br/>
    		<html:submit />
    	</html:form>
    </body>

  14. #14
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Montre le code de ta jsp
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  15. #15
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Fait ! Désolés j'avais pas vu le texte en bas

  16. #16
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Passe-t-il bien dans le getxxxx??

    Mais un loggue si tu veux en etre sur ou bien un breakpoint.

    Ooooopppsss sinon je crois que je viens de voir pourquoi ca ne marche pas, enleve les ',

    fait juste pour essayer : mapVariable(date1)
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  17. #17
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Ok !
    Merci, je teste !

    Bon ca na rien changé !

    J'ai mis des log dans les fonction get et set de la hashmap -> aucun log n est apparu sur les fonction get et set avec les paramètres (String ou objet)!

    Seul les fonctions HashMap getMapVariable() et setMapVariable(HashMap) sont appelees.

  18. #18
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Resolu !

    En fait il manquait le void setHashMap(HashMap map)
    Il fait implicitement apres appel à :

    void setHashMap(String cle,String valeur)

    Il ne faut pas les guillemets comme tu m'as proposé de le faire !

Discussions similaires

  1. Recuperer les nom des champs SELECT dans une requete
    Par guigui69 dans le forum VBScript
    Réponses: 1
    Dernier message: 28/04/2014, 18h11
  2. [SP-2007] Ajouter des champs dynamiquement dans une cutom list
    Par takuan64 dans le forum SharePoint
    Réponses: 8
    Dernier message: 26/07/2010, 14h12
  3. [AC-2003] problème de mise à jour des champs disponibles dans TCD
    Par patbeautifulday dans le forum IHM
    Réponses: 3
    Dernier message: 03/03/2010, 08h59
  4. [Dojo] Afficher des champs dynamiques dans un grid
    Par DevBetty dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 27/10/2009, 10h50
  5. Réponses: 2
    Dernier message: 08/07/2009, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo