[GWT-EXT] Form, JsonReader et upload de fichier.
Bonjour à tous.
Voilà je me casse la tête depuis quelques heures dessus et je recherche une solution ou une alternative à ce que j'ai fais.
Mon but est simple: envoyer un fichier au serveur qui le lit et me renvoye une réponse ("correctement lu" ou "erreur à la ligne...").
Pour ce faire, n'ayant pas trouvé comment le faire via une RemoteServiceServlet, j'envoie mon formulaire à une servlet qui me renvoie donc le message à afficher.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// Mon champ me permettant de chercher le fichier
TextField fileUpload = new TextField("Attach excel file", "file");
fileUpload.setInputType("file");
// L'appel à submit lorsque l'on presse le bouton du formulaire
getImportFormPanel().getForm().submit("services/propertiesupload", null, Connection.POST, "Loading...", false);
// Le FormListener associé
importFormPanel.addFormListener(new FormListener() {
public boolean doBeforeAction(Form form) {
return true;
}
public void onActionComplete(Form form, int httpStatus, String responseText) {
MessageBox.alert(responseText);
}
public void onActionFailed(Form form, int httpStatus, String responseText) {
MessageBox.alert("Error. Please try again. \n"+responseText);
}
}); |
J'ai donc une fois le bouton pressé une box qui s'ouvre et qui indique "Loading..." et qui est censé disparaitre lorsque "onActionComplete" ou "onActionFailed" serait appelée.
A la base, ma servlet écrivait tout simplement le message et comme vous le voyez, je l'affichais dans ces 2 méthodes (responseText). Je me suis rendu compte ce matin que ce système fonctionnait à merveille avec Firefox mais bugguait avec tous les autres!!! (Ie, Chrome, Safari). Le bug est simple, le message "Loading...." ne disparait jamais et la réponse de la servlet ne s'affiche donc pas.
Je suis allé voir dans la doc GWT concernant la méthode "submit"
Et il y a une note indiquant qu'il faut placer un reader pour lire la réponse du serveur. J'ai donc choisi le JsonReader et voici sa création:
Code:
1 2 3 4 5 6 7
| private RecordDef uploadResponse = new RecordDef(new FieldDef[]{
new StringFieldDef("message")
});
private JsonReader readerResponse = new JsonReader(uploadResponse);
readerResponse.setRoot("response"); |
Et voici ce que ma servlet répond maintenant:
Code:
{'response':[{'message':'MONMESSAGE'}]}
Et malgré cela, le problème est toujours identique, pire sous Firefox cela ne fonctionne plus.
A noter que je suis certain de recevoir cette réponse car c'est le résultat que Firebug me donne également.
Pouvez-vous m'aider?