繁体   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