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 :

Conserver des listes de selection, générées, après un submit


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut Conserver des listes de selection, générées, après un submit
    Bonjour,

    Je bloque sur le problème suivant :

    J'ai un formulaire avec des listes de selection dont le contenu est récupéré dans une BD par une première action "actionModifUtilisateur", une deuxième, "actionValideModifUtilisateur" étant chargé de récupérer les changement et mettre à jour la BD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <form-bean name="formModifUtilisateur" type="FormModifUtilisateur"/>
     
    <action name="formModifUtilisateur" 
            path="/actionModifUtilisateur" 
            scope="request" 
            validate = "false" 
            type="ActionModifUtilisateur">
        <forward name="succes" path="/modifUtilisateur.jsp"/>
        <forward name="echec" path="/com_echec.jsp"/>
    </action>
     
    <action input="/modifUtilisateur.jsp"
                    name="formModifUtilisateur" 
                    path="/actionValidModifUtilisateur" 
                    scope="request"
                    validate="true" 
                    type="ActionValidModifUtilisateur">
                <forward name="succes" path="/modifUtilisateur.jsp"/>
                <forward name="echec" path="/com_echec.jsp"/>
            </action>
    La page modifUtilisateur.jsp contient le code suivant pour la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select styleId="listeUtilisateurs" property="listeUtilisateurs">
       <html:optionsCollection property="nomsUtilisateurs" value="value" label="label" />
    </html:select>
    FormModifUtilisateur.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Collection<String> listeUtilisateurs  = new ArrayList<String>();
     
    public Collection<String> getListeUtilisateurs(){
        return this.listeUtilisateurs;
    }
     
    public void setListeUtilisateurs( Collection<String> listeUtilisateurs){
        this.listeHobbies = listeHobbies;
    }
     
    private Collection<LabelValueBean> nomsUtilisateurs = new ArrayList<LabelValueBean>();
     
    public Collection<LabelValueBean> getNomsUtilisateurs(){
        return this.nomsUtilisateurs;
    }
     
    public void setNomsUtilisateurs( Collection<LabelValueBean> nomsUtilisateurs){
     
        this.nomsUtilisateurs = nomsUtilisateurs;
    }
    J'obtient ainsi un formulaire avec une liste déroulante proposant la liste des nom d'utilisateurs de la BD.

    J'ai ensuite ajouté volontairement une erreur dans l'objet ActionErrors retourné par la méthode validate.

    Ce que j'aimerais, lorsqu'il y a des erreurs de saisi dans le formulaire, c'est retrouver mon formulaire inchangé, avec les listes de selections générée à la première création du formulaire.

    Je suis pour l'instant passé par toute sorte d'exception, celle que j'ai actuellement étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    exception
     
    javax.servlet.ServletException: BeanUtils.populate
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
     
    cause mère
     
    java.lang.IllegalArgumentException: argument type mismatch
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:597)
    	org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
    	org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
    	org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
    	org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    Je ne pense pas avoir une assez bonne vision globale du fonctionnement de struts et je doit mal m'y prendre, mais j'ai beau écumer le web, je ne trouve pas de réponse qui résolve mon problème.

  2. #2
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Pour l'exception je n'avais pas vu qu'il fallait que la propriété "listeUtilisateurs"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:select styleId="listeUtilisateurs" property="listeUtilisateurs">
    devait en fait être de type String, une fois le type changé plus d'erreur, mais plus aucune option dans la liste de selection...

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Il faut mettre le form-bean en scope session et non en scope request.

  4. #4
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Si je met le scope de la première action dans struts à "session", pas de de problème mais la liste est toujours vide après un submit+erreur de validation, si je met le scope de la deuxième action (celle avec l'input) à "session", là je n'ai plus aucune valeur pré-remplie dès le départ...

  5. #5
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Il faut mettre le scope="session" pour le form-bean formModifUtilisateur dans le mapping des deux Actions, celle qui initialise le formulaire et celle qui s'exécute au submit du formulaire.

  6. #6
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Enfin ça marche !

    En fait après avoir mis scope="session" j'avais oublié de changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setAttribute( mapping.getAttribute(), formulaire );
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute( mapping.getAttribute(), formulaire );
    dans l'action qui pré-rempli le formulaire.

    Merci c_nvy !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. liste type hidden disparu après un submit
    Par benchmar dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 04/03/2014, 13h45
  2. conserver l'etat des options de select multiple apres le submit
    Par raul_le_vieux dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/07/2007, 15h41
  3. liste déroulante et conservation des mots dans un input
    Par LAYETGIRL dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/03/2007, 09h47
  4. conserver les div ouverts ou fermés après le submit
    Par julien.63 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/06/2006, 08h40
  5. des Listes déroulante ...Et après?
    Par arti2004 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/03/2006, 15h40

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