2013-02-10 52 views
0

我有一个AjaxFallbackDefaultDataTable表巫婆一些文本列(PropertyColumn)。该表还包含一个包含可编辑文本字段的列。我想通过AJAX更新一个PropertyColumn,但我不想更新整个表。 我该怎么做?AJAX在Wicket更新表列

+1

难道你不介意与我们分享至少相关的一部分努力 - 只是为了支持[你有什么尝试?](http://whathaveyoutried.com/) – 2013-02-10 17:39:21

+0

我们甚至不知道*当你*想要更新那一列.. – 2013-02-10 19:54:08

+0

罗伯特,这就是我期待的(组件事件)。 – 2013-02-10 22:45:11

回答

1

如果使用Wicket 6,则可以使用组件间事件。

首先创建其持有AjaxRequestTarget像这样的事件:

public class AjaxUpdateEvent { 
    private final AjaxRequestTarget target; 

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

您可以发送这样的事件形成要使用send()方法的任何Component。你发这样的活动:

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()添加到目标。