Missing no-args constructor in EventHandler.Listener causes Exception during 
postback
-------------------------------------------------------------------------------------

                 Key: MYFACES-2490
                 URL: https://issues.apache.org/jira/browse/MYFACES-2490
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-314
    Affects Versions: 2.0.0-alpha
            Reporter: Jan-Kees van Andel
            Assignee: Jan-Kees van Andel


This is a snippet of the erroneous Facelet:

                    <h:form>
                        <dl>
...
                            <dd><h:outputText id="challenge" 
value="#{component.attributes.challenge}">
                                <f:event 
type="javax.faces.event.PreRenderComponentEvent" 
listener="#{loginBean.generateChallenge}" />
                            </h:outputText></dd>
...
                        </dl>
                    </h:form>

The problem occurs during postback, when the following Exception is thrown:

javax.servlet.ServletException: Could not restore StateHolder of type 
org.apache.myfaces.view.facelets.tag.jsf.core.EventHandler$Listener (missing 
no-args constructor?)
        at 
javax.faces.webapp.FacesServlet._handleStandardRequest(FacesServlet.java:483)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.RuntimeException: Could not restore StateHolder of type 
org.apache.myfaces.view.facelets.tag.jsf.core.EventHandler$Listener (missing 
no-args constructor?)
        at 
javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1479)
        at 
javax.faces.component.UIComponent$EventListenerWrapper.restoreState(UIComponent.java:1120)
        at javax.faces.component._DeltaList.restoreState(_DeltaList.java:300)
        at 
javax.faces.component.UIComponentBase.restoreDeltaSystemEventListenerClassMap(UIComponentBase.java:1770)
        at 
javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1611)
        at javax.faces.component.UIOutput.restoreState(UIOutput.java:213)
        at 
org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:379)
        at 
org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:393)
        at 
org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:393)
        at 
org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreView(DefaultFaceletsStateManagementStrategy.java:181)
        at 
org.apache.myfaces.application.jsp.JspStateManagerImpl.restoreView(JspStateManagerImpl.java:388)
        at 
org.apache.myfaces.view.ViewDeclarationLanguageBase.restoreView(ViewDeclarationLanguageBase.java:106)
        at 
org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.restoreView(FaceletViewDeclarationLanguage.java:927)
        at 
org.apache.myfaces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:231)
        at 
javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:80)
        at 
org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:106)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:129)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:85)
        at 
javax.faces.webapp.FacesServlet._handleStandardRequest(FacesServlet.java:448)
        ... 13 more
Caused by: java.lang.InstantiationException: 
org.apache.myfaces.view.facelets.tag.jsf.core.EventHandler$Listener
        at java.lang.Class.newInstance0(Class.java:340)
        at java.lang.Class.newInstance(Class.java:308)
        at 
javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1475)
        ... 31 more

According to the FacesListener spec, every implementation must provide a 
no-args constructor:
https://javaserverfaces.dev.java.net/nonav/docs/2.0/javadocs/javax/faces/event/FacesListener.html

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to