Wicket - как обновить одну строку в таблице с помощью ajax

В моем приложении калитки у меня есть таблица, в которой каждый столбец строки описывается одним компонентом. Один из столбцов содержит компонент 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.

Есть ли другой способ сделать это?

Какой компонент вы используете для таблицы? Таблица данных ?!

martin-g 16.12.2020 13:37

Да, я использую DataTable

A.Alexander 16.12.2020 13:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
307
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переопределите 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));

Другие вопросы по теме