Récupération de valeurs d'un formulaire dynamique
Salut,
j'ai un formulaire dynamique sur ma JSP. En fait, mon formulaire doit pouvoir envoyer un nombre de pièces jointes au serveur qui est inconnu au chargement de la page. Pour faire ça, j'ai inséré un bout de Javascript qui ajoute un champ input de type file lors du clic sur un bouton.
Le code généré est :
Code:
1 2 3
| <li><a href="#piecesjointes" onclick="$(this).parent().remove();"><img src="image/remove.png"></a><input name="piecejointe[1]" value="" class="piecejointe" id="1" type="file"></li>
<li><a href="#piecesjointes" onclick="$(this).parent().remove();"><img src="image/remove.png"></a><input name="piecejointe[2]" value="" class="piecejointe" id="2" type="file"></li>
<li><a href="#piecesjointes" onclick="$(this).parent().remove();"><img src="image/remove.png"></a><input name="piecejointe[3]" value="" class="piecejointe" id="3" type="file"></li> |
Dans mon bean associé à ce formulaire, j'ai :
Code:
1 2 3 4 5 6 7 8 9
| private FormFile[] piecejointe;
public FormFile[] getPiecejointe() {
return piecejointe;
}
public void setPiecejointe(FormFile[] piecejointe) {
this.piecejointe = piecejointe;
} |
Et lors de la soumission du formulaire, j'obtiens cette exception :
Citation:
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
cause mère
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:493)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
J'ai aussi essayé, comme déjà vu sur le net, de générer des champs input avec le même attribut name (et non pas avec un indice qui s'incrémente. J'obtiens alors :
Citation:
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
cause mère
java.lang.IllegalArgumentException: Cannot invoke logica.forms.DemandeForm.setPiecejointe - argument type mismatch
org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1778)
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)
org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)
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:493)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
Est ce que ça vient du fait que ce ne soit pas un type String simple, mais un champ file ?