У меня есть ситуация, когда я пытаюсь отобразить форму ввода в Wicket 6 ModalWindow.Wicket - отображение модального окна с компонентами формы на AjaxSelfUpdatingTimerBehavior событие не заполняет выбор пользователя
В настоящее время это очень простая форма с тремя переключателями в группе на ней для получения работы.
// in TestPanel.class, the content of TestDialog:
protected void onInitialize() {
super.onInitialize();
RadioGroup<Integer> group = new RadioGroup<Integer>("group", _model);
getForm().add(group);
group.add(new AjaxRadio<Integer>("g1", Model.of(1)) {
private static final long serialVersionUID = 1L;
@Override
protected void onInputChanged(AjaxRequestTarget target) {
System.out.println(getMarkupId() + " clicked, Input is now " + _model.getObject());
}
});
// + 2 more other similar radio buttons..
}
(AjaxRadio просто радио с AjaxEventBehavior («OnChange») добавил, что находит родительский RadioGroup и вызывает group.processInput с последующим onInputChanged)
Если я показывать этот диалог при нормальных условиях (например, onClick на AjaxLink), диалог отобразится отлично, и модель правильно обновлена.
actionsForm.add(new AjaxLink<Object>("link") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
TestDialog dialog = getDialog(TestDialog.class, target);
dialog.show(target);
}
});
g1182 clicked, Input is now 1
g2183 clicked, Input is now 2
g3184 clicked, Input is now 3
Если я показываю диалог в качестве AjaxSelfUpdatingTimerBehavior.onPostProcessTarget, модель формы компонента никогда не обновляется!
protected void onInitialize() {
super.onInitialize();
add(new AjaxSelfUpdatingTimerBehavior(Duration.ONE_SECOND) {
private static final long serialVersionUID = 1L;
@Override
protected void onPostProcessTarget(AjaxRequestTarget target) {
if(displayDialog() && dialogNotDisplayedYet()) {
TestDialog dialog = getDialog(TestDialog.class, target);
dialog.show(target);
}
}
});
}
getDialog создает ModalWindows и добавляет их в дерево компонентов. Я попытался добавить диалоги в нужную вам ситуацию (как указано выше) или создать диалог во время onInitialize, а затем просто показывать в onPostProcessTarget. Не имеет никакого значения.
g1182 clicked, Input is now null
g2183 clicked, Input is now null
g3184 clicked, Input is now null
Я использую калитку 6.19.0 и Java 7
причина реализации - я буду делать длинную задачу импорта, которая может время от времени нужно задать пользователю вопрос, поэтому поведение просканирует вопросы и представить диалог, пока задача ждет ответа.
Пожалуйста, помогите мне с этим?
Проверьте, есть ли параметр запроса для имени/значения радио в вызове Ajax. Также попробуйте остановить поведение таймера во время открытия диалога и перезапустить его после закрытия диалога. –
Не уверен, какие параметры вы имеете в виду - я проверил target.getPageParameters(). GetNamedKeys(), и в обеих ситуациях это было пустым. – fancyplants