1

AjaxFallbackDefaultDataTable テーブルにテキスト列 (PropertyColumn) があります。テーブルには、編集可能なテキスト フィールドを含む列も含まれています。PropertyColumn の 1 つを AJAX で更新したいのですが、テーブル全体を更新したくありません。どうやってやるの?

4

1 に答える 1

1

Wicket 6 を使用する場合は、コンポーネント間イベントを使用できます。

AjaxRequestTargetまず、次のようなイベントを作成します。

public class AjaxUpdateEvent {
    private final AjaxRequestTarget target;

    public AjaxUpdateEvent(AjaxRequestTarget target) {
        this.target = target;
    }
    public AjaxRequestTarget getAjaxRequestTarget() {
        return target;
    }
}

Componentこのようなイベント フォームは、メソッドを使用して任意に送信できますsend()。次のようなイベントを送信します。

send(getPage(), Broadcast.DEPTH, new AjaxUpdateEvent(target));

次に、AjaxFallbackDefaultDataTablenewCellItem をオーバーライドして、どこかから発生したときにイベントをリッスンし、目的のセル項目を AjaxRequestTarget に追加しようとします。そんな感じ:

    AjaxFallbackDefaultDataTable table =
            new AjaxFallbackDefaultDataTable("table", null, null, FLAG_RESERVED1) {
        @Override
        protected Item newCellItem(String id, int index, IModel model) {
            Item item;
            if (index == indexOfColumnYouWant){
                item = new Item(id, index, model) {
                    @Override
                    public void onEvent(IEvent<?> event) {
                        super.onEvent(event); 
                        if ((event.getPayload() instanceof AjaxUpdateEvent) ){
                            ((AjaxRequestTarget)event.getPayload()).add(item);
                        }
                    }
                };
            } else {
                item = super.newCellItem(id, index, model);
            } 

            return item;
        }
    };

さらに、アイテムをターゲットに追加することもできますisVisible()

于 2013-02-10T20:19:46.167 に答える