1

私のフォームでは、テキストを入力してからdataViewを入力しました:

private class RegistrationForm extends Form<Table> {

    private static final long serialVersionUID = 1L;

    public RegistrationForm(final Table table) {
        super("registrationForm", new CompoundPropertyModel<Table>(table));
        setOutputMarkupId(true);
        final TextField<String> text = new TextField<String>("name");
        add(text);
        DataView<Player> dataView = new DataView<Player>("rows", playerDataProvider) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(final Item<Player> listItem) {
...

listItem で、行をダブルクリックすると ajaxEventBehavior を追加します。

                listItem.add(new AjaxEventBehavior("ondblclick") {

                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onEvent(final AjaxRequestTarget target) {
                            System.out.println(table.getName());

                     }
                });

問題は、テーブルをダブルクリックすると、入力 TextField にある値ではなく null が出力されることです。なんで ?

モデルを更新しようとしています:

                            text.updateModel();

またはテキストから値を取得します。

                            System.out.println(table.getName() + "bbbbbbbbbbbbbbbbb" + text.getInput() + "vv"
                                    + text.getValue() + "ff");

しかし、成功しませんでした。

フォームには送信ボタンもあり、それを押すとすべてが機能すると思います。ダブルクリックだけで問題が発生する

4

1 に答える 1

6

AjaxEventBehaviorそれ自体はフォームを送信しないため、テキスト フィールドの値を取得していません。代わりに、次のサブクラスのいずれかを使用できます。

  • AjaxFormComponentUpdatingBehaviorFormComponent添付されているもののみを送信します。FormComponent にアタッチする必要があるため、全体にアタッチする場合は、次を使用する必要がありますListItem
  • AjaxFormSubmitBehaviorフォーム全体を送信します。これはおそらくここで必要なものです。

これらの動作はすべて Wicket に含まれており、それらの Javadoc はソース コードとともにすぐそこにあります。Ajax については、AbstractAjaxBehaviorのサブクラス、特に のサブクラスを確認してくださいAjaxEventBehavior

于 2012-08-31T11:01:20.490 に答える