如何解决Wicket:如何覆盖子类的 onSubmit 方法?
我有一个超类 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());
}
}
});
解决方法
您需要在 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());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。