0
final Address address = new Addres();
Form form = new Form("addressInputForm");
this.add(form);
form.setOutputMarkupId(true);

FormComponent fc;

fc = new RequiredTextField("street", new AddressModel(new Model(address), AddressModelType.STREET_MODEL));
fc.add(StringValidator.maximumLength(30));
fc.setLabel(new ResourceModel("label.street"));
form.add(fc);

form.add(new AjaxButton("submitAddressInput", form){

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form){                
            System.out.println(address.toString());
        }

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form){
            //
        }
    });

AjaxEventBehavior behavior = new AjaxEventBehavior("keyup"){

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            System.out.println(address.toString());
        }
    };

    form.add(behavior);

この問題に関する小さな例を作成しました。

基本的に、人が「street」というフィールドに値を挿入すると、コードから予想できるように、動作がアクティブになり、onEvent() メソッドが実行されます。onEvent() 変数アドレスが出力されます。残念ながら、address.street の値は NULL です。したがって、「Street: NULL」が出力されます。

しかし、データを送信する ajax ボタンをクリックすると、Wicket は AddressModel を介してフォームからすべてのデータをアドレス変数にロードします。そこでの最終結果は、たとえば「Street: Bond street」になります。

私の質問は、AjaxEventBehavior の場合にアドレス変数にデータを保存するプロセスをどのように開始できるかということです。

4

1 に答える 1

2

コンポーネントの値を送信する AjaxFormComponentUpdatingBehavior を使用します。

于 2012-10-17T12:27:55.880 に答える