Salut à tous,
j'essaye d'utiliser un SimpleFormController pour récupérer les données d'un formulaire d'une application GWT.
Celui-ci contient deux champs : "name" et "upload"
Le premier est un champ pour du texte (ie, le nom du fichier) et le deuxième pour uploader un fichier. Jusque là pas de problème 
Côté serveur, j'ai une servlet avec un mapping qui va bien :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/upload">uploadFile</prop>
<prop key="/download">downloadFile</prop>
</props>
</property>
</bean>
<bean id="uploadFile" class="enseirb.pfa.gwt.PFAGWT.server.filemanager.FileUpload" >
<property name="commandClass" value="enseirb.pfa.gwt.PFAGWT.server.filemanager.FileUploadBean" />
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<bean id="downloadFile" class="enseirb.pfa.gwt.PFAGWT.server.filemanager.FileDownload" /> |
Pour l'instant, je respecte l'exemple fournit dans la doc de Spring pour ce type de controleur. Ensuite mon controleur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
logger.info("onSubmit : "
+ ((FileUploadBean) command).getName() + ", "
+ ((FileUploadBean) command).getFile());
return null;
}
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws ServletException {
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
} |
Et le bean qui est attaché à mon formulaire:
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
|
public class FileUploadBean {
/**
* Nom du fichier
*/
private String name;
/**
* Données du fichier
*/
private byte[] upload;
public void setFile(byte[] file) {
this.upload = file;
}
public byte[] getFile() {
return upload;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} |
Cependant quand, j'exécute le tout :
1 2
|
[INFO] 2010-03-17 21:12:50,635 INFO [FileUpload] - onSubmit : test, null |
Ce qui signifie que j'arrive bien à récupérer le premier champ mais pas le deuxième. J'ai vérifié avec un plugin sous firefox (httpfox) et la requete POST est bien lancée avec tout ce qu'il faut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
(Request-Line) POST /filemanager/upload HTTP/1.1
Host localhost:8888
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Referer http://localhost:8888/PFAGWT/PFAGWT.html?gwt.codesvr=192.168.159.1:9997
Cookie JSESSIONID=14nezs55afnxa
Content-Type multipart/form-data; boundary=---------------------------146152234826798
Content-Length 5112
name test
upload filename="test.txt" Content-Type: text/plain |
Alors le problème vient-il du CustomEditor qui n'est pas adapté aux types de contenu ou d'une mauvaise configuration (aucune exception lancée en tout cas)?
J'ai vu que d'autre personnes avaient eût aussi des problèmes sur le forum mais je n'ai pas trouvé de réponse convaincante dans mon cas. Est-ce que quelq'un a une petite idée d'où peut venir le problème?

[Edit]
Personne n'a une petite idée ou déjà eu un problème similaire?
Est-ce que c'est tellement évident que personne ne souhaite me mettre sur la piste?
Je tiens à préciser que je suis aussi passé par une HttpServlet avec un
request.getAttribute("upload")
mais rien n'y fait.
Partager