Wicket - 如何使用 ajax 刷新 table 中的单行
Wicket - how to refresh single row in a table with ajax
在我的 wicket 应用程序中,我有一个 table,其中一行的每一列由一个 bean 描述。其中一列包含一个 ajax 组件,它可以更改 bean 中的值,从而更改显示在其他列中的值。
如何在不重新加载整个列的情况下更新这些列?table?
现在我使用下面的代码:
public static <T> void refreshTableRow(AjaxRequestTarget target, Item<ICellPopulator<T>> columnItem) {
for (Component component : columnItem.getParent()) {
if (component instanceof Item) {
((Item<?>) component).stream()
.filter(Component::getOutputMarkupId)
.forEach(target::add);
}
}
}
但是为了使这段代码正常工作,我必须为在 IColumn#populateItem
中创建的每一列的根组件设置 outputMarkupId(true)
。
还有其他方法吗?
覆盖 DataTable#newRowItem()
和 return 一些具有 outputMarkupId = true
.
的自定义项目实现
public class MyRow<T> extends Item<T> {
public MyRow<T>(String id, int index, IModel<T> model) {
super(id, index, model);
setOutputMarkupId(true);
}
}
然后在你的Ajax回调方法中做:
ajaxRequestTarget.add(findParent(MyRow.class));
在我的 wicket 应用程序中,我有一个 table,其中一行的每一列由一个 bean 描述。其中一列包含一个 ajax 组件,它可以更改 bean 中的值,从而更改显示在其他列中的值。
如何在不重新加载整个列的情况下更新这些列?table?
现在我使用下面的代码:
public static <T> void refreshTableRow(AjaxRequestTarget target, Item<ICellPopulator<T>> columnItem) {
for (Component component : columnItem.getParent()) {
if (component instanceof Item) {
((Item<?>) component).stream()
.filter(Component::getOutputMarkupId)
.forEach(target::add);
}
}
}
但是为了使这段代码正常工作,我必须为在 IColumn#populateItem
中创建的每一列的根组件设置 outputMarkupId(true)
。
还有其他方法吗?
覆盖 DataTable#newRowItem()
和 return 一些具有 outputMarkupId = true
.
public class MyRow<T> extends Item<T> {
public MyRow<T>(String id, int index, IModel<T> model) {
super(id, index, model);
setOutputMarkupId(true);
}
}
然后在你的Ajax回调方法中做:
ajaxRequestTarget.add(findParent(MyRow.class));