Ho il mio ExportServlet, che genera file XLSX (Excel) che il mio utente richiede dall'applicazione GWT facendo clic su un pulsante di esportazione.Servlet di chiamata da GWT con dati di post e file di download generato dal servlet
Se utilizzo l'approccio GET, all'utente viene richiesto di scaricare il file. Il codice è simile al seguente:
@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();
}
questo è invocato dal client GWT nel modo seguente:
String url = GWT.getModuleBaseURL() + "ExportServlet";
Window.open(url, "", "");
e all'utente viene richiesto di scaricare il file. Bene, questo è quello che voglio :)
Ma vorrei aggiungere molti dati nella richiesta, e afaik, c'è un limite alla quantità di dati che puoi inserire in un parametro URL ("ExportServlet? Data = ... "), quindi mi piacerebbe racchiuderlo in una richiesta POST.
Ho provato quanto segue da 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("");
}
});
e questo nel mio 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();
}
}
ma l'utente non viene richiesto di scaricare il file. Il metodo doPost viene richiamato e i dati vengono ricevuti dal servlet, ma dovrei estrarre il file XLSX dalla risposta che ricevo nell'app GWT? e come posso farlo?
Apprezzo tutto l'aiuto o commenti :)
ho trovato questo post: http://stackoverflow.com/questions/7282987/handle-attachment-in-response-with-requestbuilder-in-gwt che potrebbe rispondere alla mia domanda. Lo proverò e lo farò sapere ai ragazzi :) (non so come collegare/collegare il link con questa domanda SO) –
hai appena fatto :) –