我有一个带登录页面和主页面的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处理页面刷新的正确方法吗?我将不胜感激任何帮助。
答案 0 :(得分:0)
GWT应用程序是单页面应用程序。这意味着如果您的重新加载页面,您的应用程序的状态将丢失。您可以做的是使用本地存储来存储相同的状态数据,但这对于身份验证数据来说并不是一个好主意。
我建议您以对后端进行身份验证的方式重构代码,并且当用户刷新页面时,GWT客户端将从后端数据中恢复它的状态。