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 :
Dans mon bean associé à ce formulaire, j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Et lors de la soumission du formulaire, j'obtiens cette exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 :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)
Est ce que ça vient du fait que ce ne soit pas un type String simple, mais un champ file ?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)
Partager