2010-12-13 7 views
0

У меня есть проект, в котором вы можете запросить ressources, которые обслуживаются jax-rs в формате json. Все работает правильно в браузере, когда я запрашиваю URL-адрес остального, который появляется json.GWT и REST (jax-rs)

Теперь я хочу, чтобы мой проект GWT запрашивал эти ресурсы и обрабатывал их и отображал их в моем интерфейсе. Самый простой способ, которым я нашел это, - использовать построитель запросов и наложение. Код ниже. Проблема в том, что, когда код работает, он никогда не переходит в фактический RequestCallback(). Строка состояния никогда не изменяется. Я думал, что это может быть SOP, поэтому я добавил, но все равно не работает. Любой идеал?

package com.workoutcell.client; 
//import com.google.gwt.core.client.JavaScriptObject; 
import com.google.gwt.core.client.JsArray; 
import com.google.gwt.http.client.*; 
import com.google.gwt.http.client.Request; 
import com.google.gwt.http.client.RequestBuilder; 
import com.google.gwt.http.client.RequestCallback; 
import com.google.gwt.http.client.RequestException; 
import com.google.gwt.http.client.Response; 

/** 
* 
* @author 
*/ 

public class RestToInfoSession{ 

    String queryReturn = null; 
    JsArray<InfoJSO> arrayOfInfo = null; 
    String host = "http://localhost:8080/mysite"; 
    String restModule = "/calendar/getinfo"; 
    String id = null; 
    String year = null; 
    String month = null; 
    String status = "Not Initialized"; 

    public RestToInfoSession(String id, String year, String month){ 

     this.id =id; 
     this.year = year; 
     this.month = month; 
     String url = host + restModule + "/"+this.id + "/"+this.year + "/"+this.month; 
     RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 


     try { 
      status = "Initialized at Url " + builder.getUrl(); 
      Request request = builder.sendRequest(null, new RequestCallback() { 

       public void onError(Request request, Throwable exception) { 
        // Couldn't connect to server (could be timeout, SOP violation, etc.) 
        status = "Error on connecting to Server"; 
       } 


       public void onResponseReceived(Request request, Response response) { 
        if (200 == response.getStatusCode()) { 
         // arrayOfInfo = jsonToJsArray(response.getText());  
         status = "JSON has been Fetched. Result is:" + response.getText(); 
        } else if(0 == response.getStatusCode()) { 
         status = "Error is 0"; 
        } else { 
         status = "Error in JSON Request:" + response.getStatusCode(); 
         //response.getStatusText(); 
        } 
       } 

      }); 

     } catch (RequestException ex) { 
      status = "Error in Request Builder Startup"; 
     } 

    } 

    //get an jso object in array 
    private final native JsArray<InfoJSO> jsonToJsArray(String json) /*-{ 
    return eval(json); 
     }-*/; 

    public JsArray<InfoJSO> getInfoArray(){ 

     return arrayOfInfo; 
    } 

} 

UPDATE: Моя проблема такая же, как Referring to a non-final variable data inside an inner class .Я не был в курсе асинхронных вызовов рабочих механизмов. Я все еще не знаю, как передать свой response.getText(), чтобы обновить ярлык, который не является частью моего класса RestToInfoSession .... любые идеи?

+0

Если я использую инструменты разработки Google Chrome, я вижу, что мой javascript получает код 200, и полученный результат - это моя строка json. Но результат не отображается в приложении браузера на ярлыке. Это то, что ive положил в мою точку входа: Label lab3 = new Label(); lab3.setText (новый RestToInfoSession («2», «2010», «12»). GetJsonText()); – guiomie

ответ

0

Я поставил таймер, который проверяет каждые 1000 мс, если моя строка json обновлена ​​с нуля до запрашиваемых xhttp-данных. Это работает, но у меня появилось ощущение, что есть более элегантный способ решения этой проблемы.

1

Рассмотрите возможность использования проекта RestyGWT. Он будет использовать ресурсы JAXRS JSON так же просто, как использование GWT-RPC. Кроме того, вы можете, как правило, повторно использовать те же запросы ответа DTO с сервера на стороне клиента.

Смежные вопросы