java – 在GWT中使用RequestBuilder处理附件

前端之家收集整理的这篇文章主要介绍了java – 在GWT中使用RequestBuilder处理附件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从GWT Client向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的响应?

解决方法

我认为在这种情况下,你不应该使用单一的RequestBuilder AJAX调用.您可以通过调用正常调用来依赖默认的浏览器行为,并让浏览器处理PDF响应(用PDF查看器插件显示或打开保存对话框).

实现这一点有几种选择:

>如果您可以通过GET请求传递数据(仅适用于小数据卷),则可以使用数据作为GET参数创建URL,然后打开一个新的浏览器窗口,其中Window.open()将URL传递给数据.
>对于大量数据,您可以先将RequestBuilder的数据与服务器POST数据进行临时存储,并在RequestCallback.onResponseReceived()中打开一个新的浏览器窗口,其中包含一个如上所述的简短URL.在服务器端,您必须拆分PDF生成servlet分为两部分:具有POST方法的数据存储servlet(即将数据存储到Web会话中)和使用GET方法的PDF渲染servlet,它将数据从会话(并删除)中删除,并且不需要大参数.
>创建一个表单,方法POST,数据的隐藏字段和PDF生成servlet URL.使用数据填写隐藏的字段,并以编程方式提交表单(即FormPanel.submit()).如果您使用target name创建FormPanel,浏览器将打开一个新窗口或使用指定的框架来处理响应.

原文链接:https://www.f2er.com/java/125933.html

猜你在找的Java相关文章