РЕДАКТИРОВАТЬ:
Этот вопрос изначально был о флажках, но я получаю такое же поведение с выпадающим списком.Код:
productInput = new DropDownChoice<String>("productInput",
new PropertyModel<String>(this, "productSelection"),
products);
productInput.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target)
{
if (productSelection == null) // Breakpoint is set on this line
{
updateDropdownsAfterFieldDisabled(1, target);
}
else
{
updateDropdownsAfterFieldEnabled(1, target);
}
}
});
Если для productInput
не установлено обязательное значение, точка останова срабатывает каждый раз при переходе от выбора какого-либо значения к выбору опции пустой строки.Если он установлен на обязательный, точка останова никогда не будет достигнута.
Возможно ли динамически / AJAX-ishly изменить компонент формы Wicket, если он проверяется с помощью setRequired(true);
?Вот простой, хотя и надуманный пример, чтобы показать, что я имею в виду:
Проезжающие автомойки на автозаправочных станциях, как правило, три или четыре уровня обслуживания.Каждый включает в себя все, что предусмотрено нижними уровнями, и наносит еще один слой воска или дополнительное полоскание или что-то еще.Интерфейсы для стирки обычно имеют четыре кнопки с подсветкой ( пример ).Когда пользователь нажимает одну из кнопок, включается соответствующий индикатор вместе со всеми индикаторами более дешевых уровней;огни для более хороших уровней выключаются.Это поведение моделируется этим кодом:
boolean economy, standard, deluxe, ultimate = false;
CheckBox economyBox = new CheckBox("economyBox",
new PropertyModel<Boolean>(this, "economy"));
// Similar declarations for standardBox, deluxeBox and ultimatebox
OnChangeAjaxBehavior standardChangeListener = new OnChangeAjaxBehavior() {
protected void onUpdate(AjaxRequestTarget target)
{
// If "standard" is activated, also turn on the "economy" light
if (standard)
{
economy = true;
target.addComponent(economyBox);
}
// If "standard" is deactivated, deactivate "deluxe" and "ultimate"
else if (!standard)
{
deluxe = false;
ultimate = false;
target.addComponent(deluxeBox);
target.addComponent(ultimateBox);
}
}
};
standardBox.add(standardChangeListener);
// Similar listeners declared for the other three checkboxes
Я протестировал этот код - ну, настоящий код, который является упрощенной версией - и он работает, как и ожидалось.Но добавьте economyBox.setRequired(true);
, и окно перестает динамически обновляться.Есть ли способ добавить проверку, не нарушая поведение «связанных флажков»?