我们希望自动刷新使用 GWT 2 构建的页面。我们使用了很多解决方案来做到这一点:
GWT 自动刷新
自动刷新 GWT 屏幕
但是它们都无法正常工作。问题有点复杂:
自动刷新在名为"Kazalar"的主页/选项卡中工作:
http://dl.dropbox.com/u/103580364/temp/000766.jpg
但是,如果用户在另一个选项卡中,则在自动刷新后浏览器会跳转到主页/选项卡:
http://dl.dropbox.com/u/103580364/temp/000767.jpg
在上述问题的答案中,回答者说我们应该用重新创建该部分视图的代码替换 reloadAll() 函数(如果需要,可以使用一些 Ajax 调用从服务器重新获取数据)。我们无法测试此部分,因为我们不知道如何编写重新创建特定部分视图的代码。有人可以举个例子来说明如何做到这一点吗?
public class TimerExample implements EntryPoint, ClickListener {
public void onModuleLoad() {
Button b = new Button("Click and wait 5 minutes");
b.addClickListener(this);
RootPanel.get().add(b);
}
public void onClick(Widget sender) {
Timer t = new Timer
public void run() {
reloadAll();
}
};
// Schedule the timer to run once in 5 minutes.
t.schedule(5*1000*60);
}
private void reloadAll() {
Window.Location.reload();
}
}
使用计时器是可以的。
假设您了解GWT的活动和地点。苛刻的方法是使用
Window.Location.replace("url#kalazar:");
你已经提到了它;但一个真正更好的方法(假设你正在实现MVP模式)是在Kalazar视图的表示器上创建一个刷新方法。这样,您无需重新加载页面。
private void reloadAll() {
myKalazarPresenter.refresh();
}
private void myKalazarPresenter() {
myKalazarView.clear();
myKalazerView.reInit(kalazarInitializationData);
}
既然你说你不能重新初始化视图,也许你可以尝试删除并重新创建它?