GWT - 刷新按钮/历史/以前的UI

时间:2013-10-29 18:49:58

标签: java gwt

我只是想知道......

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

所以我的问题是...... 有没有办法以某种标准方式恢复gwt app 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状态,好像没有点击刷新按钮。

EntryPoint ...

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(见图)我有兴趣在按下刷新按钮后完全相同...

enter image description here

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

赞赏任何有用的评论

由于

P.S。 GWT 2.3

1 个答案:

答案 0 :(得分:1)

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

您可以使用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