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
-~----------~----~----~----~------~----~------~--~---

Reply via email to