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));