読者です 読者をやめる 読者になる 読者になる

setResponsePageでAjaxSubmitLinkが無効になったりならなかったり

Wicket書いててちょいと躓いたのでメモ。
コーディングの仕方によってAjaxSubmitLinkやAjaxButtonが効かなくなる現象が起きる訳ですが、そのうちの1つのパターンを発見。

条件:

  • メインウィンドウとサブウィンドウにAjaxSubmitLinkが1つづつ
  • サブウィンドウのAjaxSubmitLinkをクリックするとsetResponsePageする

現象:

  • サブウィンドウのAjaxSubmitLinkをクリックすると、メインウィンドウのAjaxSubmitLinkが効かなくなることがある

結論からいうと、setResponsePageの引数にclassを渡した場合はAjaxSubmitLinkは有効となり、Pageクラスのインスタンスを渡した場合には無効となります。

実際のコードを紹介(サブウィンドウのAjaxSubmitLink部分を抜粋)

Form form = new Form("form");
add(form);

form.add(new AjaxSubmitLink("link") {
    @Override
    public void onSubmit(AjaxRequestTarget target, Form form) {
        setResponsePage(OtherPage.class); // OK
        setResponsePage(new OtherPage()); // ダメ
    }
});

この挙動の違い、何なんでしょう?
追いかけてみますかね。