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 :

Mise à jour de tableau


Sujet :

Struts 1 Java

  1. #1
    Membre chevronné

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut Mise à jour de tableau
    Bonjour,
    J'ai un soucis dans la mise à jour d'un tableau avec Struts.
    JDK 1.5.05
    Struts : 1.3.8
    Tomcat 5.5.12

    J'ai un form qui étend ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private String[] vars;
    public String[] getVars() {
        return vars;
    }
    public void setVars(String[] vars) {
        this.vars = vars;
    }
    J'ai une action qui étend Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    execute(.....) {
        ....
        List l = new ArrayList();
        String[] vars = new String[10];
        for (int i = 0; i < vars.length; i++) {
             vars[i] = "....";
             l.add(....);
        }
        form.setVars(vars);
        request.setAttribute("liste", l);
        ....
    }
    J'ai une jsp avec le taglib struts-layout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <layout:collection name="liste" indexId="index">
       <layout:collectionItem>
           <layout:checkbox property="vars[${index}]" />
       </layout:collectionItem>
    </layout:collection>
    ca me génère le code html suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <table >
       <tr><td><input type="checkbox" name="vars[0]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[1]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[2]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[3]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[4]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[5]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[6]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[7]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[8]" /></td></tr>
       <tr><td><input type="checkbox" name="vars[9]" /></td></tr>
    </table>
    jusque là, tout est normal.
    Lors de la soumission du formulaire, j'ai une exception :
    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
     
    java.lang.NullPointerException
    	org.apache.commons.beanutils.PropertyUtilsBean.setIndexedProperty(PropertyUtilsBean.java:1414)
    	org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1016)
    	org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:451)
    	org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:45)
    	org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:57)
    	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    cette exception est due au fait que l'attribut 'vars' du formulaire vaut "null".
    Si j'écris la méthode "reset" du formulaire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        public void reset(ActionMapping mapping, HttpServletRequest request) {
             vars = new String[10000];
        }
    l'exception n'est plus levée; mais ça m'oblige à initialiser avec un nombre "aléatoire"?
    Existe-t-il une solution plus propre?
    Cordialement
    Matthieu

  2. #2
    Membre chevronné

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    Bonjour,
    Voici la réponse au problème :

    Il ne faut pas utiliser des String[] mais des java.util.List<String>, car on peut jouer sur les index sans soucis! (le même code fonctionne bien entendu en jdk1.4)
    form qui étend ActionForm :
    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
     
    // Attribut
    private List<String> vars= new ArrayList<String>();
     
    // Getter normal
    public List<String> getVars() {
        return vers;
    }
     
    // Setter normal
    public void setVers(List<String> vars) {
        this.vars = vars;
    }
     
    // Setter indexé
    // Si la liste est trop petite, on ajoute un élément 
    public void setvars(int index, String var) {
        while (index >= vars.size()) {
            vars.add("");
        }
        this.vars.set(index, var);
    }
     
    // Getter indexé
    // Si la liste est trop petite, on ajoute un élément...
    public String getVars(int index) {
        // automatically grow List size
        while (index >= vars.size()) {
            vars.add("");
        }
        return vars.get(index);
     
    }
    et après, c'est le même code.
    Le tag-lib 'struts-layout' utilise le getter indexé pour construire la jsp, et le setter indexé pour construire le formulaire dans l'action.

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

Discussions similaires

  1. [PPT-2010] Mise à jour de tableau
    Par halaster08 dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 29/08/2014, 10h01
  2. [XL-2010] mise à jour auto tableau croisé dynamique
    Par orcinus dans le forum Excel
    Réponses: 5
    Dernier message: 11/05/2014, 20h42
  3. mise à jour automatique tableau excel par macro
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2011, 11h37
  4. [vba Excel] mise à jour de tableau
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 04/06/2007, 14h59
  5. Mise à jour de tableau
    Par Huso-San dans le forum Delphi
    Réponses: 4
    Dernier message: 04/05/2007, 13h06

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