2011-09-23 33 views
0

我得到了下面的結構在一個HTML表格中顯示編輯的行阿帕奇檢票 - 清爽的ListView從ListView控件

Panel 
+ WebMarkupContainer - in HTML <tbody wicket:id="container"> 
    + ListView which for each item in the list does (in HTML this) 
    + item.add(new PopTable1Row("Pop1Panel", popTable1Item, ComponentMode.EDIT)); 
     + PopTable1Row component contains 
     + Form 
      + some inputs and a 2 submit buttons (Save, Delete) 

現在我想通過點擊刪除列表視圖將AJAX以實現例如內部觸發像重新加載而不重新加載整個頁面。刪除按鈕從表中刪除一行,所以一行應該消失。

我實現通過使用AjaxSelfUpdatingTimerBehavior重新加載的ListView:

WebMarkupContainer.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5))); 

它刷新列表視圖每5秒。 好的,但現在我想刷新例如刪除按鈕onSubmit的列表視圖。

而這裏的問題是:如何做到這一點?

我試圖在onSubmit

this.getParent().getParent().getParent().getParent().render(); 
this.getParent().getParent().getParent().getParent().renderComponent(); 

但兩者沒有工作。

+0

這些按鈕是Ajax按鈕?如果是這樣,他們會得到一個傳入的AjaxTarget。只需將WMC添加到目標即可完成。 – bert

回答

4

首先,您必須在您的listView中將outputId設置爲true。所以Wicket會爲列表標籤生成一個id,需要由ajax更新。

yourListView.setOutputMarkupId(true);

然後在您的onSubmit方法中告訴Wicket重新繪製列表。請注意,在該示例中,保存按鈕是一個AjaxLink,但您可以使用其他組件。

AjaxLink<Void> dltBttn = new AjaxLink<Void>("yourButtonId") { 
    public void onClick(AjaxRequestTarget target) { 
    // your stuff 

    if(target != null) { 
     // tells wicket to repaint your list 
     target.addComponent(yourListViewComponent); 
} 
    } 
} 
+0

謝謝!這工作。也感謝@bert。爲了讓這個答案完成,我最終的代碼如下所示:target.addComponent(this.getParent()。getParent()。getParent()。getParent()); –

+2

注入目標組件或者只是將其定義爲類中的成員變量並且只是通過名稱調用它會不會更容易?這樣,只要你添加或刪除圖層,你的應用程序就不會中斷... – Nicktar

+0

行不行。我必須用它來爭取更多的東西。 –