Appel de la servlet à partir de GWT avec les données post et télécharger le fichier généré par le servlet
J'ai mon ExportServlet, qui sont la génération de fichiers XLSX (Excel) que mon utilisateur demande à mon GWT application en cliquant sur un bouton exporter.
Si j'utilise le OBTENIR de l'approche, l'utilisateur est invité à télécharger le fichier. Le code ressemble à ceci:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
byte[] xlsx = createTest("");
sendXLSX(resp, xlsx, "test.xlsx");
}
catch (Exception e)
{
e.printStackTrace();
}
}
void sendXLSX(HttpServletResponse response, byte[] bytes, String name)
throws IOException
{
ServletOutputStream stream = null;
stream = response.getOutputStream();
response.setContentType(CONTENT_TYPE_XLSX);
response.addHeader("Content-Type", CONTENT_TYPE_XLSX);
response.addHeader("Content-Disposition", "inline; filename=" + name);
response.setContentLength((int) bytes.length);
stream.write(bytes);
stream.close();
}
C'est invoquée par le client GWT de la manière suivante:
String url = GWT.getModuleBaseURL() + "ExportServlet";
Window.open(url, "", "");
et l'utilisateur est invité à télécharger le fichier. Bon, c'est ce que je veux 🙂
Mais je voudrais joindre un grand nombre de données dans la demande, et autant que je sache, il y a une limite à la quantité de données que vous pouvez mettre dans un paramètre de l'URL ("ExportServlet?data=..."), donc j'aimerais conclure que, dans une requête POST à la place.
J'ai essayé par la suite de partir GWT:
String url = GWT.getModuleBaseURL() + "ExportServlet";
RequestBuilder builder = new RequestBuilder(
RequestBuilder.POST, url);
Request response = builder.sendRequest("test data", new RequestCallback()
{
@Override
public void onResponseReceived(Request request, Response response)
{
System.out.println("");
}
@Override
public void onError(Request request, Throwable exception)
{
System.out.println("");
}
});
et c'est à mon servlet:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
String data = req.getReader().readLine();
byte[] xlsx = createTest(data);
sendXLSX(resp, xlsx, "test.xlsx");
}
catch (Exception e)
{
e.printStackTrace();
}
}
mais l'utilisateur n'est pas invité à télécharger le fichier. La méthode doPost est invoquée et la réception des données par la servlet, mais suis-je censé extraire le fichier XLSX à partir de la réponse que je reçois dans le GWT application? et comment suis-je supposé faire?
D'apprécier l'aide ou des commentaires 🙂
vous n'avez tout simplement 🙂
OriginalL'auteur Rasmus Nielsen | 2012-08-02
Vous devez vous connecter pour publier un commentaire.
Ok, je suis donc allé à la 3ème approche dans les liens DONC, la question.
Créer un FormPanel, mettre vos données dans des champs cachés, définissez l'URL de votre servlet, appelez la méthode d'envoi par programme sur la forme et le problème décrit dans cet DONC, la question sera résolue.
De détails sur la façon d'extraire des données à partir des champs cachés:
Donc mon doPost ressemble à ceci:
J'ai un champ caché dans mon formulaire avec le nom "fieldName", où les données sont placées et soumis à la servlet. Espérons que cela aide 🙂
Ajouté plus de détails à ma réponse
OriginalL'auteur Rasmus Nielsen
Salut j'ai le même problème exactement , et de le résoudre en utilisant directlly appel de la servlet utilisant
Window.Location.replace(URL.encode(servletUrl));
vérifier ce lien ainsi lié à la Question de
OriginalL'auteur lukass77