Как обновить метку после смены цвета в калитке

Я использую Викет 1.5

Когда я меняю цвет, он действительно меняется на странице только после обновления с помощью F5. Как обновить его в бэкэнде?

Я использую эти строки для изменения цвета: dateDescription.add(AttributeModifier.replace("стиль", "цвет:красный;")); добавить (датаОписание);

ОБНОВЛЕНИЕ №1 Теперь я использую AJAX, но все еще должен обновить страницу для изменения цвета. Не могли бы вы сказать мне, что я сделал неправильно?

    // in page class
    public class FilterUpdateBehavior extends AjaxFormComponentUpdatingBehavior {
        public FilterUpdateBehavior(String event) {
            super(event);
        }

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            RefreshResult result = getResult(target);
            if (result.getStatus() == RefreshResultStatus.DATE_NOT_SET) {
                dateIntervalFilterPanel.setAlarmDateStatus(true);
            } else {
                dateIntervalFilterPanel.setAlarmDateStatus(false);
            }
        }
    }
    
    
    // in date panel class
    dateDescription.add(new AttributeModifier("style", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    String cssClass = null;
                    if (isAlarmDateStatus()) {
                        cssClass = "color:red;";
                    } else {
                        cssClass = "color:black;";
                    }
                    return cssClass;
                }
            }));
    add(dateDescription);

ОБНОВЛЕНИЕ №2

    public RefreshResult getResults(AjaxRequestTarget target) {
        // ... somewhere here additional logic of getting particulate RefreshResult
        target.add(table);
        target.add(paging);
        target.add(loadingPanel);
        return new RefreshResult(resultType);
    }

ОБНОВЛЕНИЕ №3 ФИНАЛЬНОЕ (МНЕ ПОМОГЛО) Я пропускаю эту строку кода, когда меняю isAlarmDateStatus, теперь она работает нормально. Спасибо Андреа!

    target.add(dateDescription);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
210
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

ваша строка кода выглядит правильно, но вы должны использовать AJAX, чтобы отразить ваши изменения без перезагрузки всей страницы. К сожалению, Wicket 1.5 действительно устарел, и в Интернете мало ресурсов, чтобы предоставить вам пример поддержки AJAX. Вы можете попробовать посмотреть старый пример кода 1.5 AJAX здесь:

https://github.com/apache/wicket/tree/build/wicket-1.5.17/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin

я изменил реализацию с помощью AJAX и обновил вопрос, не могли бы вы высказать свое мнение?

Kirill 17.12.2020 14:12

Я думаю, вы пропустили код getResult(...). Я ожидаю увидеть «target.addComponent» где-нибудь в вашем коде.

Andrea Del Bene 17.12.2020 15:01

я добавил метод getResults(..), у меня есть target.add для 3 элементов страницы - filter, paging, loadingPanel. И эти элементы действительно обновляются после события onUpdate. Должен ли я использовать «target.add (dateIntervalFilterPanel)» для обновления панели с меткой, которую я хотел обновить во время события onUpdate?

Kirill 17.12.2020 17:07

Вы должны быть в порядке, просто добавив метку к «цели AjaxRequestTarget». Вызывали ли вы setOutputMarkupId для каждого компонента, который хотите обновить через AJAX?

Andrea Del Bene 18.12.2020 13:00

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