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