1

我有一个 AjaxFallbackDefaultDataTable 表,其中包含一些文本列(PropertyColumn)。该表还包含一个带有可编辑文本字段的列。我想通过 AJAX 更新 PropertyColumn 之一,但我不想更新整个表。我怎样才能做到这一点?

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));

然后在AjaxFallbackDefaultDataTable我将尝试覆盖 newCellItem 并在某个时间从某个地方触发时在那里监听事件,并将所需的单元格项目添加到 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 回答