【问题标题】:Wicket: How to override onSubmit method from subclass?Wicket:如何从子类覆盖 onSubmit 方法?
【发布时间】:2021-04-09 03:49:01
【问题描述】:

我有一个超类 A 和一个子类 B。超类 A 有一个表单和 onSubmit 方法。我想在子类上覆盖该表单方法。如何做到这一点?

示例 A

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。

【问题讨论】:

    标签: java wicket


    【解决方案1】:

    你需要在A.java中创建onSubmit(Form&lt;?&gt; form, AjaxRequestTarget target)并委托给它:

    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());
            }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多