2017-09-14 199 views
0

我有一个登录页面和主页面的gwt应用程序。登录应用程序转到主页面后。我想要的是如果我刷新页面留在主页面,而不是登录页面。我读过很多东西,我尝试了History Mechanish,但没有结果。这里是我的代码:如何防止gwt app进入页面刷新后的登录页面?

@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); 

        } 

       } 
      }); 

     } 

我也尝试:

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); 
        } 

是这个处理页面刷新与History.addValueChangeHandler的正确方法?我将不胜感激任何帮助。

+0

这是一个很好的示例https://github.com/ArcBees/GWTP-Samples/tree/master/carstore –

+0

将您的应用程序分为多个模块。 onLoad方法的登录页面可以检查用户是否已经登录并重定向到主入口模块。这些重定向仅适用于模块的html文件。简单。 – WLGfx

+0

@WLGfx你的意思是有两个html文件? – Papadakis

回答

0

GWT应用程序是一个单页面应用程序。这意味着如果您的重新加载页面,您的应用程序的状态将会丢失。你可以做的是使用本地存储来存储相同的状态数据,但这不是一个认证数据的好主意。

我建议你以对后端进行身份验证的方式重构代码,当用户刷新页面时,GWT客户端将从后端数据中恢复状态。

+0

“我建议你用一种方式重构你的代码,以便在后端完成身份验证,当用户刷新页面时,GWT客户端将从后端数据中恢复状态。”我不能在这里得到你的意思..你的意思是没有RPC调用? – Papadakis