簡體   English   中英

如何使用Wicket的AjaxLink創建可更新面板?

[英]How to create updateable panel using AjaxLink of Wicket?

我試圖實現一個鏈接(實際上是許多鏈接),該鏈接使用Wicket的AjaxLink更新網站中的表格。 但是我失敗了,該表永遠不會更新(我有“ setOutputMarkupId(true)”並調用“ setDefaultModelObject”和“ addComponent”,但是肯定還有其他錯誤)。

如何實現一個包含多個鏈接的面板和一個顯示動態數據的表格,取決於所單擊的鏈接? 有人可以舉個例子嗎(也許有兩個鏈接,當單擊第一個鏈接時,表格顯示1-10之間的兩個隨機數;當單擊第​​二個鏈接時,表格顯示1-100之間的隨機數字)? 無需重新加載整個頁面,而僅重新加載表格的html?

一個可能的原因可能是您沒有使用“可刷新”模型,而是獲取了列表項並將它們直接傳遞給組件,因此列表get在會話中被序列化並且不會被更新。

如果是這種情況,請將LoadableDetachableModel(在其load方法中檢索列表)傳遞給組件。 如果沒有看到您的代碼,我就不會再具體了。

我認為您沒有明確定義自己在做什么。

這兩個表是不同的實現嗎? 如果是這樣,那么您的代碼是正確的-您必須用新組件替換舊組件,然后將新組件添加到ajax響應中。

但實際上,我想您有1個表組件實現。

因此,您需要做的是這樣的事情:

public class RandomNumberListModel extends LoadableDetachableModel {
    private int upperBound;

    public RandomNumberListModel(int upperBound) {...}

    public void setUpperBound(int upperBound) {...}

    protected Object load() {
        // generate random number list using upper bound
        // return list
    }        
}

...

final MyTableComponent table = new MyTableComponent(new RandomNumberListModel(30));
add(table);    
AjaxLink link = new AjaxLink("myButton") {
    public void onClick(final AjaxRequestTarget target) {
        table.getModel().setUpperBound(100);
        target.addComponent(table);
    }
};
add(link);

(編輯)我添加了一個動態的,可重用的模型來說明該模型如何工作。 有多種實現方法,具體取決於您希望可重用的內容。 關鍵是該模型動態生成列表(即根據請求),並且可以在onClick回調中操縱數字范圍的upperBound。

就像jboyd詢問的那樣,您是否有知道在Ajax響應中發送表內容的代碼?

final Component tableComponent = ....;
AjaxLink link = new AjaxLink("myButton"){
    public void onClick(final AjaxRequestTarget target) {
        target.addComponent(tableComponent);
    }
};
add(link);

addComponent是jboyd所指的部分。

wicketstuff.org示例中有一個這樣的示例,即樹/樹表之一。 頂部的三個鏈接更改了表格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM