我尝试使用Wicket的AjaxLink来实现更新网站中的表的链接(实际上是许多链接)。但我失败了,表永远不会更新(我有“setOutputMarkupId(true)”并调用“setDefaultModelObject”和“addComponent”,但必须有其他错误)。
如何实现具有多个链接的面板和显示动态数据的表格,具体取决于所点击的链接?有人可以给出一个例子(可能是两个链接,当点击第一个时,表格会显示1-10中的两个随机数,当点击第二个时,表格会显示1-100中的随机数字)?没有重新加载整个页面,只有表格的html?
答案 0 :(得分:3)
一个可能的原因可能是您没有使用'可刷新'模型,而是获取列表项并将它们直接传递给组件,因此列表在会话中被序列化并且不会更新。
如果是这种情况,请将LoadableDetachableModel(检索其加载方法中的列表)传递给组件。如果没有看到您的代码,我就无法更具体。
答案 1 :(得分:2)
我不认为你已经非常明确地定义了你的行为。
这两个表是不同的实现?如果是这样,那么您的代码是正确的 - 您必须用新的组件替换旧组件,然后将新组件添加到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。
答案 2 :(得分:1)
就像jboyd问你有没有知道在Ajax响应中发送表内容的代码吗?:
final Component tableComponent = ....;
AjaxLink link = new AjaxLink("myButton"){
public void onClick(final AjaxRequestTarget target) {
target.addComponent(tableComponent);
}
};
add(link);
addComponent部分是jboyd所指的部分。
答案 3 :(得分:1)
wicketstuff.org示例中有一个这样的例子,tree/tree table。顶部的三个链接改变了表格。