簡體   English   中英

Wicket:如何從子類覆蓋 onSubmit 方法?

[英]Wicket: How to override onSubmit method from subclass?

我有一個超類 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。

您需要在 A.java 中創建onSubmit(Form<?> 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());
        }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM