问题描述
我将应用程序从Wicket 6.x升级到Wicket 8.x,还将 Button 和 AjaxButton 类替换为 IndicatingAjaxButton 类。单击提交按钮链接时出现错误提示。
IndicatingAjaxButton btnSubmit = new IndicatingAjaxButton("submit") {
private static final long serialVersionUID = 1L;
@SuppressWarnings("rawtypes")
@Override
protected void onSubmit(AjaxRequestTarget target) {
AjaxLazyLoadPanel panel = new AjaxLazyLoadPanel("cnt2") {
private static final long serialVersionUID = 1L;
@Override
public Component getLazyLoadComponent(String markupId) {
try {
return new ContractClasspanel(markupId,null,getIdentifier(),getTimelines());
} catch (ContractException e) {
throw new RuntimeException("",e);
}
}
};
panel.setoutputMarkupId(true);
form.setVisible(false);
AbstractContractsClasspage.this.replace(panel);
target.focusComponent(AbstractContractsClasspage.this);
}
@Override
protected void onError(AjaxRequestTarget target) {
super.onError();
}
};
错误|发生异常: org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException:行为被拒绝的接口调用。组件:[AjaxButton [组件ID =提交]]行为:org.apache.wicket.ajax.markup.html.form.AjaxButton$1@591549f6 在org.apache.wicket.core.request.handler.ListenerRequestHandler.invoke(ListenerRequestHandler.java:276) 在org.apache.wicket.core.request.handler.ListenerRequestHandler.invokeListener(ListenerRequestHandler.java:222) 在org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:208) 在org.apache.wicket.request.cycle.RequestCycle $ HandlerExecutor.respond(RequestCycle.java:914) 在org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65) 在org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:282) 在org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253) 在org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221) 在org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:275) 在org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:206) 在org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:299) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:320) 在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:204) 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92) 在org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77) 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)处 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:334) 在org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) 在org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) 在org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) 在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 在org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615) 在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 在org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:818) 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1623) 在org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:748)
解决方法
我错过了在表单中添加当前类(AbstractContractsClassPage.this)的代码。而且我调用了错误的方法focusComponent()而不是add()。
在调用add()方法而不是focusComponent()之后,我得到了解决方案。
protected void onSubmit(AjaxRequestTarget target) {
AjaxLazyLoadPanel panel = new AjaxLazyLoadPanel("cnt2") {
private static final long serialVersionUID = 1L;
@Override
public Component getLazyLoadComponent(String markupId) {
try {
return new ContractClassPanel(markupId,null,getIdentifier(),getTimelines());
} catch (ContractException e) {
throw new RuntimeException("",e);
}
}
};
panel.setOutputMarkupId(true);
form.setVisible(false);
AbstractContractsClassPage.this.replace(panel);
**target.add(AbstractContractsClassPage.this);**
}