2

これが私の履歴値変更イベントハンドラです:

  public void onValueChange(ValueChangeEvent<String> event) {
    String token = event.getValue();

    if (token != null) {

      if (token.equals("!list")) {
          GWT.runAsync(new RunAsyncCallback() {

            public void onFailure(Throwable caught) {
            }

            public void onSuccess() {
                presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView());
                presenter.go(container);
            }
        });
      }
      else if (token.equals("!add")) {
          GWT.runAsync(new RunAsyncCallback() {

            public void onFailure(Throwable caught) {
            }

            public void onSuccess() {
                presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
                presenter.go(container);
            }
        });
      }
      else if (token.equals("!edit")) {
          GWT.runAsync(new RunAsyncCallback() {

                public void onFailure(Throwable caught) {
                }

                public void onSuccess() {
                    presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
                    presenter.go(container);
                }
          });
      }

    }

ご覧のとおり、www.domain.com/#edit にアクセスすると、編集ビューが読み込まれます。しかし、ID などのフラグメントでパラメーターを指定し、それを Edit Contacts Presenter に渡すにはどうすればよいでしょうか?

www.domain.com/#edit/1

4

2 に答える 2

1

まず、add ケースと edit ケースが onSuccess でまったく同じことを行うため、例が壊れているように見えます。しかし、私はあなたがすでにそれを知っていたと確信しています;-)

私は 1.5 から GWT を使用していませんが、メモリから、文字列マッチングでこれを行いました。

if (token.startsWith("edit")) {
  String userID = token.substring("edit".length() + 1);
  //...
}

履歴をサポートするためにオブジェクト モデルの一部を URL セーフ トークンにシリアライズおよびデシリアライズすることは、GWT の最も苦痛な作業の 1 つだったので、新しいバージョンの GWT にヘルパーがあればいいのにと思います。

于 2010-07-15T13:00:21.053 に答える
1

経由して取得するトークンevent.getValue()は単なる文字列です。したがって、token.split("/")すべてのフラグメントを取得してから、たとえば最初のフラグメントに従って処理を進めることができます (「編集」を取得した場合は、次に数字が必要になるなど)。 .

于 2010-07-15T15:00:24.337 に答える