0

私が間違っていることを理解するのにいくつか問題があります。

私がやること:

  • アプリケーションで getHomePage() をオーバーライドします。MyStartPage.class を返します。
  • MyStartPage は MySubPage のサブクラスです。
  • MySubPage は MySuperPage のサブクラスです。
  • MySuperPage に Panel を追加します。この Panel には、TextField のバッキング modelObject を出力する AjaxEventBehavior(onclick) を持つ TextField と WebMarkupContainer があります。

サーバーを起動して localhost/MyApp を参照するとどうなりますか:

  • WebMarkupContainer をクリックしたときにユーザー入力がなくても、印刷された modelObject は null です。

サーバーを起動し、localhost/MyApp を参照し、アプリ内の別のページに移動してから MyStartPage に戻るとどうなりますか:

  • 印刷された modelObject は、WebMarkupContainer をクリックしたときのユーザー入力と一致します。

また、次のことを行うときにも機能します。

  • アプリケーションで getHomePage() をオーバーライドし、MyLoginPage を返します。MyLoginPage には MySigninPanel が含まれています。MySigninPanel では、次のように onSignInSucceeded() をオーバーライドします。

    @Override
    protected void onSignInSucceeded() {
         setResponsePage(new MyStartPage());
    }
    

ユーザーが最初に WebMarkupContainer をクリックしたときに TextField を適切に機能させる正しい方法について、誰かが光を当てることができますか?

前もって感謝します!

//編集 :

これは Firefox のみの問題のようですが、少なくとも Chrome IE9 と IE9 の IE8 モードでは問題なく動作しています。

4

2 に答える 2

1

クリックイベントでフォームを送信しない限り、TextField のモデルはユーザーが入力したデータで更新されません。TextField はその Form の子である必要があります。そうである場合、そのコンテンツはサーバーに送信され、ターゲット タイプに変換され、検証されます。成功すると、モデルに対してクエリを実行し、ページに入力されたデータを表示できるようになります。

これを行うには、現在使用している AjaxEventBehavior の代わりに AjaxFormSubmitBehavior を使用する必要があります。

webMarkupContainer.add(new AjaxFormSubmitBehavior(form, "onclick") {

    @Override
    protected void onSubmit(AjaxRequestTarget target) {
        // You can now see what was entered in your TextField
        System.out.println(textField.getModelObject());
    }

    @Override
    protected void onError(AjaxRequestTarget target) {
        // An error occurred and you should provide some kind of feedback
    }
});
于 2012-07-15T18:29:50.637 に答える
0

なぜそれが機能するのかはわかりませんが、解決策があります。追加した

mountPage("invoice/overview", OverviewPage.class);

私の WebApplication では、FireFox で動作するようになりました (私の最初の投稿では、OverviewPage は「MyStartPage」と呼ばれています)。

以下は、変更前の wicket.ajax.baseurl とブラウザーに入力された URL の様子です。

baseUrl: wicket/bookmarkable/eyesys.web.invoice.overview.OverviewPage
ブラウザの URL:wicket/bookmarkable/eyesys.web.invoice.overview.OverviewPage?1

そして変更後:

baseUrl: invoice/overview
ブラウザの URL:invoice/overview?1

于 2012-07-22T08:23:50.933 に答える