2013-02-10 54 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()添加到目標。