当前位置: 首页 > 面试题库 >

使用GWT中的RequestBuilder处理附件

莫泓
2023-03-14
问题内容

我正在从GWT客户端向HTTPServlet发出HTTP POST请求。该Servlet从请求内容创建PDF文件,并将其写入响应流。

响应流的标题为:

Content-Disposition: attachment; filename=report.pdf

我想在用户浏览器的新窗口中打开此PDF或提示他下载它。

import com.google.gwt.http.client.*;
...

String url = "http://www.myserver.com/getData?type=3";
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(url));

try {
  Request request = builder.sendRequest(data, new RequestCallback() {
    public void onError(Request request, Throwable exception) {
       // Couldn't connect to server (could be timeout, SOP violation, etc.)     
    }

    public void onResponseReceived(Request request, Response response) {
      if (200 == response.getStatusCode()) {
          // Process the response in response.getText()
          // Window.open(url, "_blank", "");
      } else {
        // Handle the error.  Can get the status text from response.getStatusText()
      }
    }       
  });
} catch (RequestException e) {
  // Couldn't connect to server        
}

我应该如何处理onResponseRecieved中的响应?


问题答案:

我认为在这种情况下,您不应使用单个RequestBuilderAJAX调用。您可以通过调用常规调用并让浏览器处理PDF响应(使用PDF查看器插件显示它或打开“保存”对话框)来依靠默认的浏览器行为。

有几种替代方法可以实现此目的:

  1. 如果可以在GET请求中传递数据(仅适用于较小的数据量),则可以使用数据作为GET参数创建URL,然后使用Window.open()打开新的浏览器窗口,并传递包含数据的URL。

  2. 对于大量数据,您可以先将数据发布RequestBuilder到服务器上以暂时存储数据,然后在RequestCallback.onResponseReceived()中打开一个新的浏览器窗口,该窗口带有短网址,如上面的替代方法1所示。在服务器端,您必须拆分PDF生成Servlet分为两部分:具有POST方法的数据存储servlet(即,将数据存储到Web会话中)和具有GET方法的PDF渲染servlet,其将数据从会话中删除(并删除)并且不会需要大参数。

  3. 使用方法POST,数据的隐藏字段和PDF生成Servlet URL创建一个表单。用数据填充隐藏的字段并以编程方式提交表单(即FormPanel.submit())。如果FormPanel使用目标名称创建浏览器,则浏览器会打开一个新窗口或使用指定的框架来处理响应。



 类似资料:
  • 问题内容: 我正在尝试使用“ GWT请求”构建器发出“跨站点请求”,但我无法使其正常工作。如您所见,这是一个GWT示例项目的大部分内容,我已经浏览了https://developers.google.com/web- toolkit/doc/latest/tutorial/Xsite 。但是我仍然缺少一些东西。 我在这里发布代码。我在想什么..? 问题答案: 实际上,如果可以在Servlet Re

  • 主要内容:GWT 事件处理,事件处理程序接口,事件方法,GWT 事件处理 示例, GWT 事件处理 GWT 提供了类似于 Java AWT 或 SWING 用户界面框架的事件处理程序模型。 监听器接口定义了一个或多个小部件调用以宣布事件的方法。GWT 提供了对应于各种可能事件的接口列表。 希望接收特定类型事件的类实现关联的处理程序接口,然后将对其自身的引用传递给小部件以订阅一组事件。 例如,Button类发布点击事件,因此您必须编写一个类来实现ClickHandler来处理点击

  • 问题内容: 我正在使用GWT应用程序,该应用程序正在接收JSON字符串,而我很难了解每个对象的值。我正在尝试将传入的JSON字符串传输到对象数组中。 这是JSON(来自Firebug响应选项卡),“ d”是.NET(正在使用的Web服务是C#)。 我正在尝试将JSON解析为对象,然后将它们插入数组。我能够使用并获取整个“ d”对象以进行回显。但是,当我尝试访问数组的元素时,GWT调试器会崩溃。 }

  • 任何想法都会很棒。

  • 问题内容: 谁能给我一个创建事件和处理程序的自定义集的示例。假设您有一个Person对象,您希望小部件知道它是否已更新。 您创建了一个HandlerManager,现在您必须创建一个Event和一个Handler。您将如何定义这些类,以便可以订阅和引发事件? 大多数事件都是基于DOM的,而我想创建一些自定义事件和处理程序,这些事件和处理程序可以在任何基于浏览器的事件之外触发。 问题答案: 这是一个

  • 这是如何使用公共类frome的一个后续步骤。其他处理选项卡中的java文件?;使用来自的Usage类中的示例。java文件-有完整的文档吗?-处理2。x和3。x论坛,我有这个: /tmp/Sketch/Foo.java 这个例子运行得很好,但是如果我取消注释import peasy。组织 行,则编译失败: 当然,我确实在下安装了PeasyCam,如果我导入peasy.*它工作得很好 来自草图。 我