Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Résolu][GWT-GAE] Problème méthode asynchrone

Modification de label dans onSucces() avec data non à jours

    23 mai 2012 à 10:08:57

    Bonjour,

    Je viens vous demandez votre aide sur un petit problème qui m'embête depuis hier matin ...
    J'essaye de coder une appli web marchant. J'ai réussi à faire en sorte de me logger avec un google account, mais c'est au niveau de la récupération de l'user en partie client que ça coince ...

    Mon code :
    Classe principale Client :
    private MyUser currentUser = null;
    // (...)
    public void onModuleLoad() {
    
    	RootPanel.get("mainContainer").add(main);
    	login(currentUser);
    // (...) 
    	public void getUser(){
    		AsyncCallback<MyUser> callback = new AsyncCallback<MyUser>() {
    			public void onFailure(Throwable caught){
    
    			}
    			public void onSuccess(MyUser result){
    				currentUser = result;
    			}
    		};
    		greetingService.getUser(callback);
    	}
    
    
    	public void login(MyUser User){
    		if (User == null){
    //			Window.alert("null");
    			welcomeUser.setText("Hi, please sign in on the right !");
    			openIDLabel.setText("Please sign up");
    			openIDLoginButton.setText("Sign In");
    		}
    		else if (User != null){
    //			Window.alert("pas null");
    			welcomeUser.setText("Hi "+User.getName().split("@")[0]+" !");
    			openIDLabel.setText("Welcome, "+User.getName().split("@")[0]+".");
    			openIDLoginButton.setText("Log out");
    			if (User.isAdmin())
    				tabPanel.add(admFullPanel, "Administration");
    		}
    	}
    }
    


    Classe serveur :
    public class GreetingServiceImpl extends RemoteServiceServlet implements
    GreetingService {
    	private final static UserService userService = UserServiceFactory.getUserService();
    
    // (...)
    	
    	public MyUser getUser(){
    		final User user = userService.getCurrentUser();
    		if (userService.isUserLoggedIn())
    			return new MyUser(user.getNickname(), user.getEmail(), userService.isUserAdmin());
    		return null;
    	}
    }
    


    Classe MyUser (Shared) :
    public class MyUser implements Serializable{
    
    	private String name;
    	private String email;
    	private boolean admin = false;
    	
    	public MyUser() {
    	}
    	
    	public MyUser(String n, String e, boolean a){
    		this.name = n;
    		this.email = e;
    		this.admin = a;
    	}
    	
    	public MyUser(String n, String e){
    		this.name = n;
    		this.email = e;
    	}
    // (...) getter & Setter
    


    Mon soucis étant, que l'application ne met pas à jours le bouton et les labels, car il fait l'appel tout de suite après le retour de la méthode, sans forcement que le résultat soit présent.
    C'est d'autant plus étrange, que j'ai essayé de déplacer l'appel de la méthode login(MyUser m) un peu partout. Mon premier essai était dans la méthode onSucces(MyUser m) de la méthode getUser()

    Vous auriez une petite astuce pour que dès que la méthode de login me redirige vers mon application, cela mette à jours les infos de ma page ?
    Je commence à désespérer un peu ^^'

    Edit : Je viens de trouver ...
    Vu que le module se relance à chaque fois que le login redirige sur la page, currentUser est null tout le temps ... uhu. *Shame*

    public class SellerMoon implements EntryPoint {
    	private MyUser currentUser;
    	public void onModuleLoad() {
    
    		RootPanel.get("mainContainer").add(main);
    		getUser();
    	public void getUser(){
    		AsyncCallback<MyUser> callback = new AsyncCallback<MyUser>() {
    			public void onFailure(Throwable caught){
    			}
    			public void onSuccess(MyUser result){
    				currentUser = result;
    				login(currentUser);
    			}
    		};
    		greetingService.getUser(callback);
    	}
    
    
    	public void login(MyUser User){
    		if (User == null){
    			welcomeUser.setText("Hi, please sign in on the right !");
    			openIDLabel.setText("Please sign up");
    			openIDLoginButton.setText("Sign In");
    		}
    		else if (User != null){
    			welcomeUser.setText("Hi "+User.getName().split("@")[0]+" !");
    			openIDLabel.setText("Welcome, "+User.getName().split("@")[0]+".");
    			openIDLoginButton.setText("Log out");
    			if (User.isAdmin())
    				tabPanel.add(admFullPanel, "Administration");
    		}
    	}
    }
    


    par contre, chose étrange, mon adresse est administrateur sur le projet GAE, mais je n'ai pas l'onglet Administrateur. Alors qu'en local quand je teste avec eclipse, si je choisi de me connecter en tant qu'admin, je l'ai... Humm...

    Edit 2 : Maintenant ça fonctionne ... Alors que je n'ai rien changé ... GWT est un peu capricieux ^^'
    • Partager sur Facebook
    • Partager sur Twitter

    [Résolu][GWT-GAE] Problème méthode asynchrone

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown