2017-09-14 5 views
0

J'ai une application gwt avec une page de connexion et une page principale. Après l'application de connexion va à la page principale. Ce que je veux, c'est si je rafraîchis la page pour rester dans la page principale et ne pas aller à la page de connexion. J'ai lu beaucoup de choses et j'ai essayé History Mechanish mais aucun résultat. Voici mon code:Comment empêcher l'application gwt d'accéder à la page de connexion après l'actualisation de la page?

@Override 
    public void onSuccess(Login result) { 

     if (result.getLoginCount() == 1) { 

      final VerticalPanel userPanel = new VerticalPanel(); 

      Anchor logout = new Anchor("logout"); 
      logout.addStyleName("user"); 

      logout.addClickHandler(new ClickHandler() { 

       @Override 
       public void onClick(ClickEvent event) { 
        loginPanel.setVisible(true); 
        tablePanel.setVisible(false); 
        addPanel.setVisible(false); 
        userPanel.setVisible(false); 

       } 
      }); 

      Label user = new Label("Hi " + usernameBox.getText()); 

      userPanel.add(user); 
      user.addStyleName("user"); 
      userPanel.add(logout); 
      userPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); 
      userPanel.setVisible(true); 

      usernameBox.setText(""); 
      passwordBox.setText(""); 

      RootPanel.get("user").add(userPanel); 

      loginPanel.setVisible(false); 
      tablePanel.setVisible(true); 
      addPanel.setVisible(true); 

      History.newItem("main"); 

      History.addValueChangeHandler(new ValueChangeHandler<String>() { 

       @Override 
       public void onValueChange(ValueChangeEvent<String> event) { 

        if(History.getToken().equals("main")){ 

         loginPanel.setVisible(false); 
         tablePanel.setVisible(true); 
         addPanel.setVisible(true); 

        } 

       } 
      }); 

     } 

i aussi essayé:

String historyToken = event.getValue(); 

        if(historyToken.substring(0 , 4).equals("main")){ 

         loginPanel.setVisible(false); 
         tablePanel.setVisible(true); 
         addPanel.setVisible(true); 
        } else { 
         loginPanel.setVisible(true); 
         tablePanel.setVisible(false); 
         addPanel.setVisible(false); 
        } 

Est-ce la bonne façon de gérer rafraîchir la page avec History.addValueChangeHandler? J'apprécierais toute aide.

+0

Ceci est un bon exemple https://github.com/ArcBees/GWTP-Samples/tree/master/carstore –

+0

Séparez votre application en modules. La méthode de chargement des pages de connexion peut vérifier si l'utilisateur est déjà connecté et rediriger vers le module d'entrée principal. Ces redirections sont juste pour les fichiers html des modules. Facile. – WLGfx

+0

@WLGfx voulez-vous dire avoir deux fichiers html? – Papadakis

Répondre

0

L'application GWT est une application d'une seule page. Cela signifie que si votre page de rechargement, l'état de votre application sera perdue. Ce que vous pouvez faire, c'est d'utiliser le stockage local pour stocker les mêmes données d'état, mais ce n'est pas une bonne idée pour une donnée d'authentification.

Je vous recommande de refactoriser votre code de manière à ce que l'authentification soit effectuée par le backend et votre client GWT récupérera son état à partir des données back-end lorsque l'utilisateur actualise la page.

+0

"Je vous recommande de refactoriser votre code de manière à ce que l'authentification se fasse par le back-end et votre client GWT récupérera son état à partir des données back-end lorsque l'utilisateur actualise la page." Je ne peux pas obtenir ce que vous voulez dire ici ... Voulez-vous dire sans appel RPC? – Papadakis