0

私はちょうど不思議です...

更新ボタンをクリックすると、クライアントとサーバーのやり取り (コールバック) などで UI が変更されたにもかかわらず、gwt アプリがデフォルトの UI 状態になります。しかし、ユーザーが誤って更新をクリックした場合や、ユーザーがまだログインしている Web ページを再度開きました。

だから私の質問は... gwt アプリの UI (更新前の状態) を標準的な方法で復元する方法はありますか? 履歴トークンはこの種の問題に役立ちますか?

編集

履歴トークンに関して、私はこの例を見ました:

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 を使用することに興味があります...

ここに画像の説明を入力

しかし、どの方法を探すべきかよくわかりません。この方向の gwt スニペットは見たことがありません。それで、私は本当にあなたのアドバイスが必要です。どのように掘り下げる必要がありますか?

有益なコメントをお待ちしております

ありがとう

PS GWT 2.3

4

1 に答える 1