Comunidad de diseño web y desarrollo en internet online

Peticiones con GWT (RequestBuider)

Citar            
MensajeEscrito el 22 Abr 2010 03:06 am
Hola a todos, un gran saludo ya que no pasaba por aca hace algun tiempo XD.
el inconveniente que tengo es que estoy tratando de traer datos por medio de una clase estática en java que se pasara a javascript por medio de GWT. pero cuando hago las solicitud no obtengo los datos debido a que la clase RequestCallback no sincroniza la obtencion de la respuesta con el hilo principal por lo que al retornar el valor que estoy seteando, la respuesta aun no ha llegado y me devuelve un null, alguien sabe como sincronizar para que no me retorne sino hasta que la respuesta ya este lista, aca les dejo el codigo de mi clase estatica y de la que la invoca.

Código Java :

public class Data implements RequestCallback {
    String resp;
    static Data instance;
    final int STATUS_OK = 200;
    
    private Data(String pParams){
       RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "../data/data.php");
       rb.setTimeoutMillis(2000);
       try{
          rb.sendRequest(pParams, this);
       }catch(Exception e){
          
       }
    }
    

   @Override
   public void onResponseReceived(Request request, Response response) {
      if(STATUS_OK == response.getStatusCode()){
         resp = response.getText();
      }
   }
   public void onError(Request request, Throwable exception){
       
   }
   public String getData(){      
      return resp;
   }
   public static String getData(String pParams){
      if(instance == null)
         instance = new Data(pParams);         
      return instance.getData();
   }
       
}   

la anterior es la clase que quiero invocar desde otras clases para traer datos del servidor, y a continuacion les dejo la clase que la invoca

Código Java :

public class Prueba extends VerticalPanel {
   private static Prueba prb;
   private Prueba(){
      Button btn = new Button("prueba");
      btn.addClickHandler(btnclk);
      this.add(btn);
   }
   private ClickHandler btnclk = new ClickHandler() {
      
      @Override
      public void onClick(ClickEvent event) {
         String datos;
         try{
            datos = Data.getData("parametros"); // por ahora no son importantes los parametros            
         }catch(Exception ex){
            datos = "error";
         }
         Window.alert(datos);
         
      }
   };
   public static Prueba getInstance(){
      if(prb == null)
         prb = new Prueba();
      return prb;
   }
}

si alguien me puede dar un tip se lo agradezco enormemente ya que es para mi trabajo de grado de la Universidad.

Saludos.

Por chechopoker

91 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Abr 2010 04:00 am
para que una función que use una petición asíncrona no se puede si sigues ese paradigma tienes que regresar a sincrona.. no necesitas refrescar la pagina pero si queda inutilizable en lo que se hace el tramite en el servidor, la funcion se detiente y espera a que regrese el XHR una ves que regresa la función sigue su curso, es es la desventaja de cambiar a sicrono nuvamente pero es la unica forma, es mejor dividir las funciones en funcion de peticion y respuesta así la web continua siendo operable

Por wariodiaz

55 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Abr 2010 04:18 am
vale, muchas gracias, pero me podrías explicar mejor lo de dividir las funciones? la idea es poder usar la misma clase para hacer todas las peticiones desde las otras clases, sabes donde puedo ver un ejemplo o algo asi ?

Gracias.

Por chechopoker

91 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Abr 2010 04:43 am
no se usar protype (el framework).. pero si crear protipos en JS Programacion Orientada a Objtos en JS, si quieres te ayudo con manejo de Prototipos en JS como ves?...

Por wariodiaz

55 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2010 02:39 am
[solucionado]Gracias, ya pude solucionar el problema, lo logre utilizando el patron strategy, es largo de explicar por aca pero si alguien necesita ayuda con esto, mi correo es [email protected]

Por chechopoker

91 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.