1

Wicket フレームワークを使用してonchangeイベントを添付しています。問題は、イベントが発生したときに古い値が返され続けることです (これは理にかなっています)。以下のコードを参照してください

私がしたいのは、選択/ドロップボックスが変更された後の「新しい」値を取得することです。

どうすればこれを達成できますか?

    dropdown.add(new AjaxEventBehavior("onchange") {

        /**
         *
         * @param target
         */
        @Override
        protected void onEvent(AjaxRequestTarget target) {
            Component component = getComponent();
            DropDownChoice dropdown = (DropDownChoice) component;

            String value = dropdown.getValue();//This brings back the old value…
        }
    })
4

3 に答える 3

4

AjaxFormComponentUpdatingBehavior を使用する必要があります。そうしないと、新しい値が送信されず、getModelObject() を呼び出して新しい選択を取得します。

于 2013-04-12T09:59:18.730 に答える
1

この改札の例を見てください

ドロップダウン ajax の例

コード付きドロップダウン ajax サンプル デモ

メソッドへの注意: wantOnSelectionChangedNotifications

選択が変更された場合に、このコンポーネントの onSelectionChanged イベント ハンドラーを javascript window.location を使用して呼び出す必要があるかどうか。true の場合、選択が変更されるたびにラウンドトリップが生成され、その結果、(このコンポーネントのみの) モデルが更新され、onSelectionChanged が呼び出されます。このメソッドは、デフォルトで false を返します。代わりに Ajax を使用する場合は、wantOnSelectionChangedNotifications() が false を返すようにし、onchange イベントを使用して AjaxFormComponentUpdatingBehavior をコンポーネントに追加します。

于 2013-04-12T11:43:43.280 に答える
0

基になるモデルから値を取得する方がよい場合があります。また、変数「dropdown」にアクセスできる場合は、getComponent を使用する必要はありません。

dropdown.add(new AjaxEventBehavior("onchange") {

    /**
     *
     * @param target
     */
    @Override
    protected void onEvent(AjaxRequestTarget target) {

        String value = dropdown.getModelObject();
    }
})
于 2013-04-12T08:01:14.243 に答える