错误|发生异常:org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException:行为被拒绝接口调用

问题描述

我将应用程序从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);**
        }