我只是想知道...
当我单击刷新按钮时,我的 gwt 应用程序会进入其默认 UI 状态,尽管它的 UI 在客户端-服务器交互(回调)等期间被修改了......但有时如果用户错误地单击刷新或重新打开了用户仍然登录的网页;
所以我的问题是......有没有办法以某种标准方式恢复 gwt 应用程序 UI(其刷新前的状态)?历史代币可以帮助解决此类问题吗?
编辑
关于历史令牌,我看到了这个例子:
History.addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
String historyToken = event.getValue();
// Parse the history token
try {
if (historyToken.substring(0, 4).equals("page")) {
String tabIndexToken = historyToken.substring(4, 5);
int tabIndex = Integer.parseInt(tabIndexToken);
// Select the specified tab panel
tabPanel.selectTab(tabIndex);
} else {
tabPanel.selectTab(0);
}
} catch (IndexOutOfBoundsException e) {
tabPanel.selectTab(0);
}
}
});
...我可以注意到它从历史中恢复了 tabIndex;如果选项卡面板不会通过模块加载(默认情况下)进行初始化,那么它会有所帮助吗?
//on button click...
getSimplePanel().setWidget(new MyTabbedPane());
编辑
在这里更清楚的是我的测试代码,我试图弄清楚如何恢复 MainUI 我的意思是它以前的 UI 状态,就好像没有点击刷新按钮一样。
入口点...
public class Main implements EntryPoint {
private SimplePanel simplePanel;
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
FlowPanel flowPanel = new FlowPanel();
rootPanel.add(flowPanel, 10, 10);
flowPanel.setSize("410px", "280px");
Button setWidgetButton = new Button("Click");
setWidgetButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
getSimplePanel().setWidget(new MainUI());
}
});
flowPanel.add(setWidgetButton);
simplePanel = new SimplePanel();
flowPanel.add(simplePanel);
}
protected SimplePanel getSimplePanel() {
return simplePanel;
}
}
...和复合材料;
public class MainUI extends Composite {
private VerticalPanel verticalPanel;
int index;
public MainUI() {
FlowPanel flowPanel = new FlowPanel();
initWidget(flowPanel);
Button button = new Button("+");
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
getVerticalPanel().add(new Label(""+(++index)+": "+Math.random()));
}
});
flowPanel.add(button);
DecoratorPanel decoratorPanel = new DecoratorPanel();
flowPanel.add(decoratorPanel);
verticalPanel = new VerticalPanel();
decoratorPanel.setWidget(verticalPanel);
}
protected VerticalPanel getVerticalPanel() {
return verticalPanel;
}
}
...因此,通过从历史令牌中提取字符串并重新实例化对象或其他任何方式来“缓存” ui 状态而无需重新生成它...
例如,如果我有这个用户界面(见图),我有兴趣在按下刷新按钮后拥有完全相同的用户界面......
但我不太确定我应该寻找哪种方式?我在这个方向上没有看到任何 gwt 片段;所以我真的需要你的建议,我应该以什么方式挖掘?
任何有用的评论表示赞赏
谢谢
PS GWT 2.3