2009-02-11 5 views
0

Je semble souffrir d'une incompréhension fondamentale de la façon dont fonctionnent les appels GWT asynchrones et/ou de la mise à jour des widgets à la réception d'un rappel.Mauvaise compréhension des appels asynchrones GWT

J'ai créé les deux interfaces ainsi que l'implémentation et elles semblent communiquer entre elles. Je fais cette demande basée sur des données à la recherche raisonnable observées en passant par le débogueur Eclipse: la variable result dans la méthode onSuccess ci-dessous contient ce que je l'espère et la grille que je tente de remplir finit par être rempli avec les données de results à la sortie de la boucle. Toutefois, lorsque l'appel onSuccess revient, aucune grille n'est affichée dans mon interface graphique, conformément à l'appel uhpScrollPanel.setWidget(uhpGrid), et aucune exception de quelque sorte que ce soit n'est générée.

Je dois être en train de négliger quelque chose d'évident, quelqu'un a-t-il des idées sur où chercher?

final ScrollPanel uhpScrollPanel = new ScrollPanel(); 
    uhpVert.add(uhpScrollPanel); 
    uhpScrollPanel.setSize("100%", "100%"); 


    //build and populate grid 
    UpdateHistoryServiceAsync uhpService = UpdateHistoryService.Util.getInstance(); 

    uhpService.getUpdateHistory(new AsyncCallback<List<UpdateHistoryEntryBean>>() { 

     public void onFailure(Throwable caught) { 
      System.out.println("OnFailure"); 
      caught.printStackTrace(); 

      final Label uhpErrorLabel = new Label("Server Unable to Grab History..."); 
      uhpScrollPanel.setWidget(uhpErrorLabel); 
      uhpErrorLabel.setSize("100%", "100%"); 

     } 

     public void onSuccess(List<UpdateHistoryEntryBean> result) { 
      int length = result.size(); 

      final Grid uhpGrid = new Grid(); 
      uhpScrollPanel.setWidget(uhpGrid); 
      uhpGrid.setBorderWidth(1); 
      uhpGrid.setSize("100%", "100%"); 
      uhpGrid.resize(length, 3); 

      int i = 0; 
      for (UpdateHistoryEntryBean entry : result) { 
       uhpGrid.setText(i, 0, String.valueOf(entry.getSourceId())); 
       uhpGrid.setText(i, 1, entry.getTitle()); 
       uhpGrid.setText(i, 2, entry.getBody()); 
       i++; 
      } 
     } 

    }); 

Répondre

0

Eh bien, il se trouve que la solution rapide est d'ajouter la grille à un VerticalPanel plutôt qu'à un ScrollPanel. La question devient maintenant - pourquoi cela devrait-il être important et comment contourner ce dilemme?

+0

Je pense que vous avez besoin de publier cette question comme une question séparée, car elle n'a plus rien à voir avec le titre de votre question – rustyshelf

0

Votre méthode onSuccess() ne définit pas correctement, en tant que paramètre reçoit une Object, et vous devez downcaster après.

Signification, la signature doit être:

public void onSuccess(Object result) 

Après cela, vous pouvez downcaster explicitement l'objet que vous savez que vous êtes retourné comme ceci:

List<UpdateHistoryEntryBean> resultList = (List<UpdateHistoryEntryBean>) result; 
+0

Yuval, êtes-vous sûr? J'utilise GWT 1.5 et Java 1.5 - un support complet pour les génériques. Cette méthode sig a été générée via le support d'outil (GWTDesigner pour être spécifique ...). Dans tous les cas, les données attendues apparaissent dans ma variable de résultat, donc je pense que ce n'est pas le problème. Merci d'avoir essayé! –

+0

dans GWT 1.5+ vous pouvez le faire, donc ce n'est pas faux – rustyshelf

+0

Désolé, je suis habitué à travailler avec GWT 1.4 :) –

Questions connexes