Soit le 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package pages.engin.exporter;

import global.Global;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.collections.Factory;
import org.apache.commons.collections.ListUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import types.Engin;
import util.Fichier;
import util.Format;


public class ExporterForm extends ActionForm
{
    private static final long serialVersionUID = 1L;

    private List<Engin> listeEngin;
    
    private List<Boolean> listeValiderP;
    
    private List<String> listeNomSauvegarde;
    
    private String nomSauvegarde;

    @SuppressWarnings("unchecked")
    @Override
    public void reset(ActionMapping arg0, HttpServletRequest request)
    {
        this.setListeEngin(ListUtils.lazyList(
                new ArrayList<Engin>(), new Factory()
                {
                    public Object create()
                    {
                        return new Engin();
                    }
                }));
        
        this.setListeValiderP(ListUtils.lazyList(
                new ArrayList<Boolean>(), new Factory()
                {
                    public Object create()
                    {
                        return new Boolean(false);
                    }
                }));
        
        this.setListeNomSauvegarde(ListUtils.lazyList(
                new ArrayList<String>(), new Factory()
                {
                    public Object create()
                    {
                        return new String();
                    }
                }));
        
        this.listeNomSauvegarde = getNomsSauvegardes(request);
    }

    public List<Engin> getListeEngin()
    {
        return listeEngin;
    }

    public void setListeEngin(List<Engin> listeEngin)
    {
        this.listeEngin = listeEngin;
    }

    
    private ArrayList<String> getNomsSauvegardes(HttpServletRequest request)
    {
        ...
        return listeNomSauvegarde;
    }

    public List<Boolean> getListeValiderP()
    {
        return listeValiderP;
    }

    public void setListeValiderP(List<Boolean> listeValiderP)
    {
        this.listeValiderP = listeValiderP;
    }

    public List<String> getListeNomSauvegarde()
    {
        return listeNomSauvegarde;
    }

    public void setListeNomSauvegarde(List<String> listeNomSauvegarde)
    {
        this.listeNomSauvegarde = listeNomSauvegarde;
    }


    public String getNomSauvegarde()
    {
        return nomSauvegarde;
    }


    public void setNomSauvegarde(String nomSauvegarde)
    {
        this.nomSauvegarde = nomSauvegarde;
    }

    
    
}
Et la JSP :

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<%@ page language="java"%>
<%@ taglib uri="/tags/struts-logic" prefix="logic"%>
<%@ taglib uri="/tags/struts-html-el" prefix="html-el"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<%@ taglib uri="/tags/struts-nested" prefix="nested"%>

<%@ taglib uri="/tags/jstl-c" prefix="c"%>
<html-el:xhtml />

<%@ page import="global.Global"%>

<script type="text/javascript">
<!--

function selectAll(selectionP)
{
    // Boucle sur tous les éléments du formulaire de cette page
    for (k=0 ; k<document.forms[0].elements.length ; k++) 
    {
        var obj = document.forms[0].elements[k];
        
        // Restriction aux éléments qui ne sont pas indéfini
        if (obj.id != undefined) 
        {
            // recherche des radios box
            if (obj.id.indexOf("idValiderP") == 0)
            {
                obj.checked = selectionP;
            }
        }
    }
}

//-->
</script>

<h1><bean:message key="Exporter-engins" /></h1>

<div class="gestionBase">

<p class="messageImportant"><html-el:errors
    property="ATT_ERREUR_GLOBAL" /></p>

<html-el:form action="/enginExporter.do">


    <p class="texteCentre">
    <br />
    <strong>
        <bean:message key="Selectionner-types-engins-exporter" />
    </strong>
    </p>

    
    <table class="liste" cellpadding="10" cellspacing="10">
        <tr>
                <th>
                    <bean:message key="Engin" />
                </th>
                
                <th>
                    <span class="separateurDroite">
                        <bean:message key="Selection" />
                    </span>
                    
                <img
                        src="<%=Global.WEB_REP_STYLE_IMAGES + Global.WEB_SEPARATOR%>selection.png"
                        class="vignette"
                        title="<bean:message key="Tout-selectionner"/>"
                        alt="<bean:message key="Tout-selectionner"/>"
                        onclick="return selectAll(true);">
                
                <img
                        src="<%=Global.WEB_REP_STYLE_IMAGES + Global.WEB_SEPARATOR%>deselection.png"
                        class="vignette"
                        title="<bean:message key="Ne-rien-selectionner"/>"
                        alt="<bean:message key="Ne-rien-selectionner"/>"
                        onclick="return selectAll(false);">
                    
                </th>
        </tr>
        
        <logic:iterate id="engin" name="EnginExporterForm"
            property="listeEngin" indexId="index">
            
            <tr class="ligne<%=index%2%>">
                <td>
                    <bean:write name="engin" property="nom" />
                </td>
                
                <td>
                    <html-el:checkbox styleId="idValiderP${index}" property="listeValiderP[${index}]" />
                </td>
            </tr>
            
        </logic:iterate>

            
    </table>

    
        
    <p class="texteCentre"><strong> <bean:message
        key="Indiquer-nom-sauvegarde" /> : </strong> <br />
    </p>

        <table class="selection">
            <tr>

                <td>
                    <bean:message key="Nom" /> : <html-el:text property="nomSauvegarde" size="20" />&nbsp;
                    
                    <span class="messageImportant"><html-el:errors    property="nomSauvegarde" /></span>
                    
                    <img
                        src="<%=Global.WEB_REP_STYLE_IMAGES + Global.WEB_SEPARATOR%>checkin.png"
                        class="bouton positionnerDroite separateurDroite"
                        title="<bean:message key="Creer-sauvegarde"/>"
                        alt="<bean:message key="Creer-sauvegarde"/>"
                        onclick="return confirmerSubmit('<bean:message key="Creer-la-sauvegarde"/> ?');">
                                        
                </td>
                
                <logic:notEmpty name='EnginExporterForm' property='listeNomSauvegarde'>
                <td>
                    <bean:message key="Liste-sauvegardes" />&nbsp;:&nbsp;
                    <br />
                    <html-el:select 
                        styleClass="largeur100pourcent" 
                        disabled="true"
                        size="6"
                        property="nomSauvegarde">
                    
                        <html-el:options property="listeNomSauvegarde" />
                    </html-el:select>                    
                </td>
                </logic:notEmpty>
                
            </tr>
            
            
        </table>


</html-el:form></div>

<!-- gestionBase -->
La validation du formulaire me donne l'exception suivante :

type Rapport d'exception
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
exception
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
cause mère
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469)
org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
...cause mère
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
java.util.ArrayList.RangeCheck(Unknown Source)
java.util.ArrayList.set(Unknown Source)
org.apache.commons.collections.ListUtils$LazyList.set(Unknown Source)
org.apache.commons.beanutils.PropertyUtilsBean.setIndexedProperty(PropertyUtilsBean.java:1417)
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:467)
...
Et lorsque la ligne suivante est retirée de la JSP :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<html-el:checkbox styleId="idValiderP${index}" property="listeValiderP[${index}]" />
... ou bien que le radio ne sont pas sélectionnés, je n'ai pas d'exception.

Pourquoi cela ?

Merci.