[英]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.