Uploaded image for project: 'MyFaces Core'
  1. MyFaces Core
  2. MYFACES-3613

NPE in composite component when ActionListener is missing in the source

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.1.8
    • 2.0.16, 2.1.10
    • None
    • None
    • Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716

    Description

      Consider the following component (simpleCommandButton.xhtml)

      <ui:component xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns="http://primefaces.org/ui"
      xmlns:cc="http://java.sun.com/jsf/composite"
      >

      <cc:interface>
      <cc:attribute name="action"/>
      <cc:attribute name="actionListener"/>
      <cc:attribute name="value"/>
      </cc:interface>
      <cc:implementation>
      <h:commandButton value="#

      {cc.attrs.value}

      " action="#

      {cc.attrs.action}

      " actionListener="#

      {cc.attrs.actionListener}

      " immediate="true">
      <cc:insertChildren/>
      </h:commandButton>
      </cc:implementation>
      </ui:component>

      And in your page:
      <myLib::simpleCommandButton value="Test" action="exit"/>

      When clicking on the button a NPE occurs:

      java.lang.NullPointerException
      at org.apache.myfaces.view.facelets.el.ValueExpressionMethodExpression.invoke(ValueExpressionMethodExpression.java:68)
      at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
      at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:83)
      at javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
      at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:418)
      at javax.faces.component.UICommand.broadcast(UICommand.java:103)
      at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
      at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
      at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
      at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:759)
      at org.springframework.faces.webflow.FlowLifecycle.invokePhase(FlowLifecycle.java:118)
      at org.springframework.faces.webflow.FlowLifecycle.execute(FlowLifecycle.java:70)
      at org.springframework.faces.webflow.JsfView.processUserEvent(JsfView.java:120)
      at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:226)
      at org.springframework.webflow.engine.ViewState.resume(ViewState.java:196)
      at org.springframework.webflow.engine.Flow.resume(Flow.java:545)
      at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:258)
      at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169)
      at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
      at org.springframework.faces.webflow.JsfFlowHandlerAdapter.handle(JsfFlowHandlerAdapter.java:48)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
      at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:643)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
      at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1302)
      at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:95)
      at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1302)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java

      probably because of the missing (null) attribute "actionListener" in the source declaration.

      Attachments

        1. MYFACES-3613-1.patch
          2 kB
          Leonardo Uribe

        Activity

          People

            lu4242 Leonardo Uribe
            marco.fago marco fago
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: