В калитки 1.4 я исправлял ошибки, вызванные методом onValidate() в специальной форме. К сожалению, после перехода на калитки 6 изменился порядок выполнения методов или мой код был написан плохо. Итак, у меня есть кнопка ajax, похожая на эту:
final AjaxFallbackButton submitButton = new AjaxFallbackButton(PREFIX + ".submit", new I18nModel(title), panelForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
// submit method
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
addPanel.setProcessingEnabled(true);
}
};
submitButton.add(new AjaxFormSubmitBehavior(panelForm, "onclick"){
@Override
protected void onEvent(AjaxRequestTarget target) {
addPanel.setProcessingEnabled(false);
super.onEvent(target);
}
});
addPanel
указывает на класс, содержащий форму, в которой я хочу очистить ошибки. Итак, в этом классе я добавляю такую форму:
panelForm = new Form<B>("panelForm", new PrefixedCompoundModel<B>(getDefaultModelObject(), PREFIX)) {
@Override
protected void onValidate() {
super.onValidate();
if (!processingEnabled) {
Session.get().getFeedbackMessages().clear(new ContainerFeedbackMessageFilter(this));
}
}
@Override
protected void onError() {
UiUtils.refresh(panelForm);
}
};
Переменная processingEnabled
по умолчанию имеет значение true. Я менял его только тогда, когда была нажата кнопка выше ajax. Раньше это шло сначала к моему поведению, а затем к onValidate в форме выше. Прямо сейчас это идет: onValidate -> onError(panelForm) -> behavior -> onValidate -> onError(panelForm) -> onError(button)
. Я хотел бы передать аргумент processingEnabled перед onValidate
или очистить все ошибки, связанные с этой формой, в методе onError. Спасибо за отзыв.