您应该在此处阅读有关 GWT 历史的文档。
作为您的案例的示例,假设您想记住用户在哪个选项卡上(参数 t)以及用户搜索的查询(参数 q)。您将输入您的网址,例如
t=2&q=你好
然后当您的 GWT 模块正在加载时。检查 url 以查看这些参数是否在此处。如果是,请解析它们以加载正确的选项卡并进行搜索。如果没有,请从头开始加载。示例理论代码:
private int selectedTab;
private String query;
public void onModuleLoad() {
String token = History.getToken();
if (!Strings.isNullOrEmpty(token)) {
// parse the history token
String t = token.substring(2,3);
String q = token.substring(6, token.length());
int tabIndex = Integer.valueOf(t);
setSelectedTab(tabIndex);
search(q);
} else {
// init from scratch
setSelectedTab(0);
}
// Add a listener to your tab panel, to change the History token everytime the
tab changes
tabPanel.addSelectionHandler(new SelectionHandler<Integer>(){
public void onSelection(SelectionEvent<Integer> event) {
selectedTab = event.getSelectedItem();
setSelectedTab(selectedTab);
changeHistoryToken();
}});
// Add listeners for your search query stuff
}
private void changeHistoryToken() {
History.newItem("t=" + selectedTab + "&q=" + query);
}
private void setSelectedTab(int index) {
// Set the selected tab
}
关键是,每次应用程序的状态发生变化时,都会向历史记录添加一个新项目。此项目是一个字符串,表示您的应用程序的状态。然后,当您加载应用程序时,请检查此令牌是否在此处。如果是,请通过解析令牌并设置正确的值(选择的选项卡、搜索查询等)来初始化您的应用程序。如果没有历史令牌,则使用默认值初始化。
不要忘记通过将此 iframe 添加到您的页面来启用历史记录支持:
<iframe src="javascript:''"
id="__gwt_historyFrame"
style="width:0;height:0;border:0"></iframe>