В моем приложении калитки у меня есть таблица, в которой каждый столбец строки описывается одним компонентом. Один из столбцов содержит компонент ajax, который может изменять значения в компоненте и, следовательно, значения, отображаемые в других столбцах.
Как я могу обновить эти столбцы без перезагрузки всей таблицы?
Теперь я использую следующий код:
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);
}
}
}
Но для правильной работы этого кода я должен установить outputMarkupId(true)
для корневого компонента каждого столбца, созданного в IColumn#populateItem
.
Есть ли другой способ сделать это?
Да, я использую DataTable
Переопределите DataTable#newRowItem()
и верните некоторую пользовательскую реализацию Item, которая имеет 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));
Какой компонент вы используете для таблицы? Таблица данных ?!