Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT自动刷新代码跳转到主页_Java_Javascript_Gwt - Fatal编程技术网

Java GWT自动刷新代码跳转到主页

Java GWT自动刷新代码跳转到主页,java,javascript,gwt,Java,Javascript,Gwt,我们希望自动刷新使用GWT2构建的页面。我们使用了很多解决方案: 但两者都不能正常工作。问题有点复杂: 自动刷新在名为“Kazalar”的主页/选项卡中工作: 但是,如果用户在另一个选项卡中,则在自动刷新后,浏览器会跳转到主页/选项卡: 在上面的例子中,答案是我们应该用代码替换reloadAll()函数,重新创建该部分的视图(如果需要的话,使用一些Ajax调用从服务器重新获取数据)。我们无法测试此部件,因为我们不知道如何编写代码来重新创建特定部件的视图。有人能举例说明怎么做吗 publi

我们希望自动刷新使用GWT2构建的页面。我们使用了很多解决方案:

但两者都不能正常工作。问题有点复杂:

自动刷新在名为“Kazalar”的主页/选项卡中工作:

但是,如果用户在另一个选项卡中,则在自动刷新后,浏览器会跳转到主页/选项卡:

在上面的例子中,答案是我们应该用代码替换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();
  }
}
使用计时器是可以的

假设你知道。 严酷的方法是使用

Window.Location.replace("url#kalazar:");
你已经提到了;但是一个更好的方法(假设您正在实现MVP模式)是在Kalazar视图的演示者上创建一个刷新方法。这样您就不需要重新加载页面

  private void reloadAll() {
    myKalazarPresenter.refresh();
  }

  private void myKalazarPresenter() {
    myKalazarView.clear();
    myKalazerView.reInit(kalazarInitializationData);
  }

既然你说你不能重新创建视图,也许你可以试着删除并重新创建它?

当显示“Kazalar”位置时,你启动这个计时器,当调用
timer.run()
时,你调用第一次加载该选项卡时用来填充数据的方法。我建议不要创建位置。reload()。只需在计时器中重新加载显示的数据。