У меня есть суперкласс A и подкласс B. Суперкласс A имеет форму и метод onSubmit. Я хотел бы переопределить этот метод формы в подклассе. Как этого добиться?

Пример А

form.add(new AjaxFormSubmitBehavior(form, "onsubmit") {
        @Override
        protected void onSubmit(AjaxRequestTarget target) {
            super.onSubmit(target);

            if (errorsList == null) errorsList = new ArrayList<>();
            prepareFormValuesForSubmit();
            PaymentsValidator.debtInfoIsValid(model.getObject(), errorsList);

            if (!errorsList.isEmpty()) {
                for (String error : errorsList)
                    error(error);

                JavascriptUtils.showMessagesForFeedbackPanel(target, feedback);
                return;
            }

            Long id = sendPayment(target);
            getOBSession().setAttribute((Object) DebtInfoViewPage.PAGE_PARAMETER, id);
            JavascriptUtils.goToPage(target, Constants.DEBTINFO_BASE_URL + "/" + DebtInfoViewPage.class.getSimpleName());

            getOBSession().setSaveDoc(false);
        }

На B:

getPaymentForm().add(new AjaxFormSubmitBehavior(getPaymentForm(), "onSubmit") {

        @Override
        protected void onSubmit(AjaxRequestTarget target) {
            List<String> errors = new ArrayList<>();
            PaymentsValidator.auditStatementIsValid(auditorsContactModel.getObject(), errors);
            if (errors.size() == 0) {
                auditorsContactModel.getObject().setDebtInfoId(getDebtInfoModel().getObject().getId());
                ServiceLocator.getService(DocumentService.class).persist(auditorsContactModel.getObject());
            }
        }
    });

Этот способ не работает, похоже, он добавляет еще один onSubmit.

0
Oljas 9 Апр 2021 в 06:49

1 ответ

Лучший ответ

Вам нужно создать onSubmit(Form<?> form, AjaxRequestTarget target) в A.java и передать ему:

A.java :

 form.add(new AjaxFormSubmitBehavior(form, "onsubmit") {
    @Override
    protected void onSubmit(AjaxRequestTarget target) {
        super.onSubmit(target);
        /*A.this.*/onSubmit(form, target);
    }
});

protected void onSubmit(Form<?> form, AjaxRequestTarget target) {
        if (errorsList == null) errorsList = new ArrayList<>();
        prepareFormValuesForSubmit();
        PaymentsValidator.debtInfoIsValid(model.getObject(), errorsList);

        if (!errorsList.isEmpty()) {
            for (String error : errorsList)
                error(error);

            JavascriptUtils.showMessagesForFeedbackPanel(target, feedback);
            return;
        }

        Long id = sendPayment(target);
        getOBSession().setAttribute((Object) DebtInfoViewPage.PAGE_PARAMETER, id);
        JavascriptUtils.goToPage(target, Constants.DEBTINFO_BASE_URL + "/" + DebtInfoViewPage.class.getSimpleName());

        getOBSession().setSaveDoc(false);
    }

B.java :

 @Override void onSubmit(Form<?> form, AjaxRequestTarget target) { {
   List<String> errors = new ArrayList<>();
        PaymentsValidator.auditStatementIsValid(auditorsContactModel.getObject(), errors);
        if (errors.size() == 0) {
            auditorsContactModel.getObject().setDebtInfoId(getDebtInfoModel().getObject().getId());
            ServiceLocator.getService(DocumentService.class).persist(auditorsContactModel.getObject());
        }
 }
1
martin-g 9 Апр 2021 в 04:05