如何防止gwt app在页面刷新后进入登录页面?

时间:2017-09-14 15:48:28

标签: gwt gwt-history

我有一个带登录页面和主页面的gwt应用程序。登录后应用程序进入主页面。我想要的是,如果我刷新页面以保持在主页面而不是登录页面。我读了很多东西,我尝试过历史机制,但没有结果。这是我的代码:

@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处理页面刷新的正确方法吗?我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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

相关问题