Я использую Викет 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);
ваша строка кода выглядит правильно, но вы должны использовать AJAX, чтобы отразить ваши изменения без перезагрузки всей страницы. К сожалению, Wicket 1.5 действительно устарел, и в Интернете мало ресурсов, чтобы предоставить вам пример поддержки AJAX. Вы можете попробовать посмотреть старый пример кода 1.5 AJAX здесь:
Я думаю, вы пропустили код getResult(...). Я ожидаю увидеть «target.addComponent» где-нибудь в вашем коде.
я добавил метод getResults(..), у меня есть target.add для 3 элементов страницы - filter, paging, loadingPanel. И эти элементы действительно обновляются после события onUpdate. Должен ли я использовать «target.add (dateIntervalFilterPanel)» для обновления панели с меткой, которую я хотел обновить во время события onUpdate?
Вы должны быть в порядке, просто добавив метку к «цели AjaxRequestTarget». Вызывали ли вы setOutputMarkupId для каждого компонента, который хотите обновить через AJAX?
я изменил реализацию с помощью AJAX и обновил вопрос, не могли бы вы высказать свое мнение?