代码之家  ›  专栏  ›  技术社区  ›  Arne Deutsch

如何使用Wicket的Ajaxlink创建可更新面板?

  •  0
  • Arne Deutsch  · 技术社区  · 14 年前

    我试图实现一个链接(实际上有很多链接),它使用Wicket的Ajaxlink更新网站中的表。但我失败了,表永远不会更新(我有“setOutputmarkupid(true)”,调用“setDefaultModelObject”和“addComponent”,但肯定有其他错误)。

    我怎样才能实现一个有许多链接的面板和一个显示动态数据的表,这取决于单击的链接?有人能举个例子吗(可能有两个链接,当第一个链接被单击时,表显示1-10中的两个随机数,当第二个链接被单击时,表显示1-100中的随机数)?不重新加载整个页面,只加载表的HTML?

    4 回复  |  直到 13 年前
        1
  •  2
  •   ireddick    13 年前

    我认为你没有很清楚地定义你在做什么。

    这两个表是不同的实现吗?如果是这样,那么您的代码是正确的——您必须用新组件替换旧组件,然后将新组件添加到Ajax响应中。

    实际上,我可以想象您有一个表组件实现。

    因此,你需要做的是:

    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回调中操作数字范围的上界。

        2
  •  3
  •   Jawher    14 年前

    一个可能的原因是,您没有使用“可刷新”模型,而是提取列表项并将它们直接传递给组件,因此列表在会话中被序列化,不会得到更新。

    如果是这种情况,请将loadableDetachableModel(用于检索其加载方法中的列表)传递给组件。如果没有看到您的代码,我就不能更具体。

        3
  •  1
  •   Matt    14 年前

    就像jboyd问的那样,您是否有知道在Ajax响应中发送表内容的代码?:

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

    addcomponent部分是jboyd所指的部分。

        4
  •  1
  •   Thomas Kappler    14 年前

    在wicketstuff.org的例子中有一个这样的例子: tree/tree table 一个。顶部的三个链接改变了桌子。