gpt4 book ai didi

java - GWT - 刷新按钮/历史记录/上一个 UI

转载 作者:行者123 更新时间:2023-12-01 13:55:07 26 4
gpt4 key购买 nike

我只是想知道...

当我单击刷新按钮时,我的 gwt 应用程序将进入其默认 UI 状态,尽管其 UI 在客户端-服务器交互(回调)等过程中进行了修改...但有时,如果用户单击刷新,“缓存”UI 确实非常重要错误或重新打开用户仍然登录的网页;

所以我的问题是...有没有办法以某种标准方式恢复 gwt 应用程序 UI(刷新前的状态)?历史代币可以帮助解决此类问题吗?

编辑

关于history tokens我看到了这个例子:

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 状态,而无需通过从历史标记中提取字符串并重新实例化对象或诸如此类的方式再次重新生成它...

例如,如果我有这个 UI(参见图片),我有兴趣在按下刷新按钮后拥有完全相同的 UI...

enter image description here

但我不太确定我应该寻找哪种方式?我还没有看到这个方向的任何 gwt 片段;所以我真的需要你的建议我应该采取什么方式?

感谢任何有用的评论

谢谢

附注GWT 2.3

最佳答案

我认为您错过了将状态存储到 URL 标签中。

您可以使用 GWTP(按照评论中的建议)

事实上,您需要读取 onModuleLoad 中的主题标签并恢复您的状态。

这可能适用于 getHash() :

String state = Window.Location.getHash();
myRestoreStateFromTokenMethod(state);

更新

以下是创建推送商店的一些片段。

List<String> states = [...]

public void onClick(){ states.add("newState");changeHash(states); }


public void changeHash(){
String hash = states.get(0) + ";"
for(other states) hash += states.get(i);
// use a UrlBuilder to set the Hash
}

UrlBuilder 的文档

或者你可以试试这个:https://github.com/jbarop/gwt-pushstate

关于java - GWT - 刷新按钮/历史记录/上一个 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com