Hi,
I don't know if it is possible, but I'm trying to make a call to a
HttpServlet from a GWT app. The response should force the browser to
open excel with the returned data. In one of our jsp apps we are doing
something like this:
private void openResponse(HttpServletResponse res, boolean exportMode)
throws IOException {
if (exportMode) {
//set 2 something unknow 4 export
res.setContentType("un/known");
res.setHeader("Content-Disposition", "attachment;
filename=export.xls");
res.setBufferSize(8192);
}
else {
res.setContentType("text/html");
res.setBufferSize(8192);
}
response = res.getWriter();
response("");
response("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0
Transitional//EN\">");
response("<html>");
response("<head>");
response(" <title>test_Statistik</title>");
response(" <script language=\"JavaScript
\"><!--");
response(" function forwardPage
(page){");
response("
parent.frames[2].location.href=page;");
response(" }");
response(" // -->");
response("</script>");
}
else {
response(" <link href=\"css/global.css\" rel=\"stylesheet\"
type=\"text/css\">");
}
response("</head>");
response("<body>");
}
Our Servlet looks like this:
public class FileExportServiceImpl extends HttpServlet{
private static final long serialVersionUID = -8989627883697806443L;
public BaseManagementI manager;
/**
* HTTP GET und POST Request verarbeiten.
* @param request servlet request
* @param response servlet response
* @throws ServletException ServletException
* @throws IOException IOException
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
try {
this.checkUser(request);
// HttpSession session = request.getSession();
response.setHeader("Content-Disposition", "attachment;
filename=export.xls");
response.setContentType("application/ms-excel");
response.setContentLength(8100);
PrintWriter out = response.getWriter();
String htmlString = new String("<HTML>" +
"<TABLE cellspacing=1 cellpadding=1 border=1> " +
"<TR> " +
"<TD align=center colspan=4> <FONT size=4
color=blue>Price Quote</FONT></TD>" +
"</TR>" +
"<TR>" +
"<TD><B>Product</B></TD>" +
"<TD><B>Price</B></TD>" +
"<TD><B>Quantity</B></TD>" +
"<TD><B>Total</B></TD>" +
"</TR> " +
" <TR>" +
" <TD>1</TD>" +
" <TD>2</TD>" +
" <TD>3</TD>" +
" <TD>3</TD>" +
" </TR>" +
" </TABLE>" );
out.print(htmlString);
out.flush();
out.close();
}
catch (BaseModuleException e) {
logger.error("Error exporting file",e);
}
}
My GWT code looks like this:
public class BaseExcelUtil {
/**
*/
public void sendExcelRequest(String servletUrl) {
RequestBuilder builder = new RequestBuilder
(RequestBuilder.POST,
servletUrl);
try {
// Set the result String we expect back to be the empty
String
String requestData = "";
// Create a callback object to handle the result
ExcelRequestCallback callback = new ExcelRequestCallback();
// Execute the request.
builder.sendRequest(requestData,
callback);
}
catch (RequestException e) {
Window.alert(e.getMessage());
}
}
public class ExcelRequestCallback implements RequestCallback{
/**
* Implementation of the RequestBuilder's onError() method. In
this
* example code, we simply raise an alert window displaying the
* appropriate message from the GWT i18n messages object.
*/
public void onError(Request request, Throwable exception) {
Window.alert("Error ;)");
}
/**
* Implementation of the RequestBuilder's onResponseRecieved()
method.
*/
public void onResponseReceived(Request request, Response response){
// First check if the response's status code is 200 (which is what
we are expecting)
Header[] headers = response.getHeaders();
String test = response.getHeadersAsString();
if (response.getStatusCode() != 200) {
//If not, display an appropriate error message, including the
status code...
Window.alert("Error code: "+(response.getStatusCode()));
Window.alert("Error code: "+(response.getStatusText()));
// ...and exit
return;
}
}
}
}
I always got a Internatl Server Error 500 when calling the servlet.
Does anybody has an idea.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---