List<Boolean> avec Bean populate à l'écriture
Soit le ActionForm :
Code:
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:
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" />
<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" /> :
<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 :
Citation:
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:
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. ;)