Hi,

On Mon, Nov 7, 2016 at 9:44 AM, Erik de Hair <e.deh...@pocos.nl> wrote:

> Hi,
>
> Some of our users keep complaining about unexpected exceptions so I was
> investigating what kind of exceptions occur. Now it seems it's quite easy
> to get an exception if you double click on an 'OK' button. (Some people
> still don't know where to single click or double click :-S)
>

It is up to the application to decide how to prevent double form
submittions.
An easy way is to disable the button during Ajax call, e.g.
Wicket-Bootstrap provides integration with Ladda
<http://msurguy.github.io/ladda-bootstrap/>:
http://wb-mgrigorov.rhcloud.com/extensions#ladda

@Dan: is it easy to decide which buttons in Isis shoud have this behavior ?


> org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedExceptionBehavior
> rejected interface invocation. Component: [AjaxButton [Component id =
> okButton]] Behavior: org.apache.wicket.ajax.markup.
> html.form.AjaxButton$1@2070e2d3 Listener: [RequestListenerInterface
> name=IBehaviorListener, method=public abstract void
> org.apache.wicket.behavior.IBehaviorListener.onRequest()]
> org.apache.wicket.RequestListenerInterface#invoke(RequestLis
> tenerInterface.java:237)
> org.apache.wicket.core.request.handler.ListenerInterfaceRequ
> estHandler#invokeListener(ListenerInterfaceRequestHandler.java:250)
> org.apache.wicket.core.request.handler.ListenerInterfaceRequ
> estHandler#respond(ListenerInterfaceRequestHandler.java:236)
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor
> #respond(RequestCycle.java:890)
> org.apache.wicket.request.RequestHandlerStack#execute(Reques
> tHandlerStack.java:64)
> org.apache.wicket.request.cycle.RequestCycle#execute(Request
> Cycle.java:261)
> org.apache.wicket.request.cycle.RequestCycle#processRequest(
> RequestCycle.java:218)
> org.apache.wicket.request.cycle.RequestCycle#processRequestA
> ndDetach(RequestCycle.java:289)
> org.apache.wicket.protocol.http.WicketFilter#processRequestC
> ycle(WicketFilter.java:259)
> org.apache.wicket.protocol.http.WicketFilter#processRequest(
> WicketFilter.java:201)
> org.apache.wicket.protocol.http.WicketFilter#doFilter(Wicket
> Filter.java:282)
> org.apache.catalina.core.ApplicationFilterChain#internalDoFi
> lter(ApplicationFilterChain.java:241)
> org.apache.catalina.core.ApplicationFilterChain#doFilter(App
> licationFilterChain.java:208)
> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChai
> n(AbstractShiroFilter.java:449)
> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(Abst
> ractShiroFilter.java:365)
> org.apache.shiro.subject.support.SubjectCallable#doCall(
> SubjectCallable.java:90)
> org.apache.shiro.subject.support.SubjectCallable#call(Subjec
> tCallable.java:83)
> org.apache.shiro.subject.support.DelegatingSubject#execute(
> DelegatingSubject.java:383)
> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInt
> ernal(AbstractShiroFilter.java:362)
> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(O
> ncePerRequestFilter.java:125)
> org.apache.catalina.core.ApplicationFilterChain#internalDoFi
> lter(ApplicationFilterChain.java:241)
> org.apache.catalina.core.ApplicationFilterChain#doFilter(App
> licationFilterChain.java:208)
> org.apache.catalina.core.StandardWrapperValve#invoke(Standar
> dWrapperValve.java:220)
> org.apache.catalina.core.StandardContextValve#invoke(Standar
> dContextValve.java:122)
> org.apache.catalina.authenticator.AuthenticatorBase#invoke(A
> uthenticatorBase.java:503)
> org.apache.catalina.core.StandardHostValve#invoke(StandardHo
> stValve.java:170)
> org.apache.catalina.valves.ErrorReportValve#invoke(ErrorRepo
> rtValve.java:103)
> org.apache.catalina.valves.AccessLogValve#invoke(AccessLogValve.java:950)
> org.apache.catalina.core.StandardEngineValve#invoke(Standard
> EngineValve.java:116)
> org.apache.catalina.connector.CoyoteAdapter#service(CoyoteAd
> apter.java:421)
> org.apache.coyote.ajp.AjpProcessor#process(AjpProcessor.java:190)
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler
> #process(AbstractProtocol.java:611)
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor#run(
> JIoEndpoint.java:314)
> java.util.concurrent.ThreadPoolExecutor#runWorker(ThreadPool
> Executor.java:1142)
> java.util.concurrent.ThreadPoolExecutor$Worker#run(ThreadPoo
> lExecutor.java:617)
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable#
> run(TaskThread.java:61)
>     java.lang.Thread#run(Thread.java:745)
>
> There's another frequently occurring exception in the log that occurs when
> using the autocomplete field:
>
> java.lang.IllegalStateExceptiongetOutputStream() has already been called
> for this response org.apache.catalina.connector.
> Response#getWriter(Response.java:678)
>

This is a bug, but I am not sure where exactly.
An application should not try to write both to the Servlet's writer and
outputStream in the same response.


> org.apache.catalina.connector.ResponseFacade#getWriter(Respo
> nseFacade.java:213)
> org.apache.wicket.protocol.http.servlet.ServletWebResponse#s
> endRedirect(ServletWebResponse.java:280)
> org.apache.wicket.protocol.http.HeaderBufferingWebResponse#s
> endRedirect(HeaderBufferingWebResponse.java:117)
> org.apache.wicket.request.handler.render.WebPageRenderer#
> redirectTo(WebPageRenderer.java:176)
> org.apache.wicket.request.handler.render.WebPageRenderer#
> respond(WebPageRenderer.java:242)
> org.apache.wicket.core.request.handler.RenderPageRequestHand
> ler#respond(RenderPageRequestHandler.java:175)
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor
> #respond(RequestCycle.java:890)
> org.apache.wicket.request.RequestHandlerStack#execute(Reques
> tHandlerStack.java:64)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:310)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#executeExceptio
> nRequestHandler(RequestCycle.java:319)
> org.apache.wicket.request.cycle.RequestCycle#processRequest(
> RequestCycle.java:233)
> org.apache.wicket.request.cycle.RequestCycle#processRequestA
> ndDetach(RequestCycle.java:289)
> org.apache.wicket.protocol.http.WicketFilter#processRequestC
> ycle(WicketFilter.java:259)
> org.apache.wicket.protocol.http.WicketFilter#processRequest(
> WicketFilter.java:201)
> org.apache.wicket.protocol.http.WicketFilter#doFilter(Wicket
> Filter.java:282)
> org.apache.catalina.core.ApplicationFilterChain#internalDoFi
> lter(ApplicationFilterChain.java:241)
> org.apache.catalina.core.ApplicationFilterChain#doFilter(App
> licationFilterChain.java:208)
> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChai
> n(AbstractShiroFilter.java:449)
> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(Abst
> ractShiroFilter.java:365)
> org.apache.shiro.subject.support.SubjectCallable#doCall(
> SubjectCallable.java:90)
> org.apache.shiro.subject.support.SubjectCallable#call(Subjec
> tCallable.java:83)
> org.apache.shiro.subject.support.DelegatingSubject#execute(
> DelegatingSubject.java:383)
> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInt
> ernal(AbstractShiroFilter.java:362)
> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(O
> ncePerRequestFilter.java:125)
> org.apache.catalina.core.ApplicationFilterChain#internalDoFi
> lter(ApplicationFilterChain.java:241)
> org.apache.catalina.core.ApplicationFilterChain#doFilter(App
> licationFilterChain.java:208)
> org.apache.catalina.core.StandardWrapperValve#invoke(Standar
> dWrapperValve.java:220)
> org.apache.catalina.core.StandardContextValve#invoke(Standar
> dContextValve.java:122)
> org.apache.catalina.authenticator.AuthenticatorBase#invoke(A
> uthenticatorBase.java:503)
> org.apache.catalina.core.StandardHostValve#invoke(StandardHo
> stValve.java:170)
> org.apache.catalina.valves.ErrorReportValve#invoke(ErrorRepo
> rtValve.java:103)
> org.apache.catalina.valves.AccessLogValve#invoke(AccessLogValve.java:950)
> org.apache.catalina.core.StandardEngineValve#invoke(Standard
> EngineValve.java:116)
> org.apache.catalina.connector.CoyoteAdapter#service(CoyoteAd
> apter.java:421)
> org.apache.coyote.ajp.AjpProcessor#process(AjpProcessor.java:190)
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler
> #process(AbstractProtocol.java:611)
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor#run(
> JIoEndpoint.java:314)
> java.util.concurrent.ThreadPoolExecutor#runWorker(ThreadPool
> Executor.java:1142)
> java.util.concurrent.ThreadPoolExecutor$Worker#run(ThreadPoo
> lExecutor.java:617)
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable#
> run(TaskThread.java:61)
>     java.lang.Thread#run(Thread.java:745)
>
> The autocomplete works as expected so it doesn't trouble the user. Anybody
> else getting this exception or does it depend on our configuration?
>
> Erik
>
>

Reply via email to