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 🙂

J'ai trouvé ce post: stackoverflow.com/questions/7282987/... qui pourrait répondre à ma question. Je vais l'essayer et de laisser u savez les gars 🙂 (ne sais pas comment lier un rapport avec le lien avec cette SORTE de question)
vous n'avez tout simplement 🙂

OriginalL'auteur Rasmus Nielsen | 2012-08-02