加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Gwt请求构建器 – 如何返回响应字符串

发布时间:2020-12-14 16:44:52 所属栏目:Java 来源:网络整理
导读:我需要实现一个调用Web服务并返回响应的函数. 我试过了 public String getFolderJson(String path) { String result="initial_value"; StringBuilder param = new StringBuilder(); param.append("?sessionId=").append(getSessionId()); param.append("path
我需要实现一个调用Web服务并返回响应的函数.

我试过了

public String getFolderJson(String path) {  
           String result="initial_value";
           StringBuilder param = new StringBuilder();  
           param.append("?sessionId=").append(getSessionId());  
           param.append("&path=").append(path);  
           RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,"https://localhost/folder" + param);  
                   try {  
                        builder.sendRequest(null,new RequestCallback() {  
                        @Override  
                        public void onResponseReceived(Request request,Response response) {  
                              result = response.getText();
                              System.out.println(response.getText());  
                                            //I need to return "result"   
                        }  
                        @Override  
                        public void onError(Request request,Throwable exception) {}  
                          });  
                    return result; //the result get returned before the response is recieved.So i am getting the return value "initial_value".
                   }      
                   catch (RequestException e) {}  
        return null;
    }

调用getFolderJson()Web服务被成功调用.但结果在收到之前返回.所以我得到了retunr值“initial_value”.
当getFolderJson()函数时如何从响应中返回值?

解决方法

GWT不支持同步Ajax,因此您必须使用异步模式对应用进行编码.

GWT用于执行请求的低级对象是XMLHttpRequest(除了旧版本的IE版本),而GWT总是将async设置为true来调用它的open()方法.所以,同步ajax的唯一方法就是维护你自己修改的XMLHttpRequest.java版本.但是同步的ajax是一个坏主意,甚至jQuery已经不赞成这种可能性.

所以gwt中的正常方法应该是你的方法返回void,并且当响应可用时,你传递一个带有回调的附加参数来执行.

public void getFolderJson(String path,Callback<String,String> callback) {  
    RequestBuilder builder = new RequestBuilder(...);
    try {
      builder.sendRequest(null,new RequestCallback() {  
        @Override  
        public void onResponseReceived(Request request,Response response) {
          callback.onSuccess(response.getText());  
        }  
        @Override  
        public void onError(Request request,Throwable exception) {}
          callback.onFailure(exception.getMessage());  
        });
    } catch (RequestException e) {
        callback.onFailure(exception.getMessage());  
    }  
}

我宁愿gwtquery Promises语法,而不是请求构建器一:

Ajax.get("http://localhost/folder?sessionId=foo&path=bar")
    .done(new Function(){
      public void f() {
        String text = arguments(0);
      }
    });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读