You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "marco fago (JIRA)" <de...@myfaces.apache.org> on 2012/09/21 13:45:07 UTC

[jira] [Created] (MYFACES-3613) NPE in composite component when ActionListener is missing in the source

marco fago created MYFACES-3613:
-----------------------------------

             Summary: NPE in composite component when ActionListener is missing in the source
                 Key: MYFACES-3613
                 URL: https://issues.apache.org/jira/browse/MYFACES-3613
             Project: MyFaces Core
          Issue Type: Bug
    Affects Versions: 2.1.8
         Environment: Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716
            Reporter: marco fago


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:p="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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (MYFACES-3613) NPE in composite component when ActionListener is missing in the source

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-3613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Leonardo Uribe updated MYFACES-3613:
------------------------------------

    Status: Patch Available  (was: Open)
    
> NPE in composite component when ActionListener is missing in the source
> -----------------------------------------------------------------------
>
>                 Key: MYFACES-3613
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3613
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>         Environment: Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716
>            Reporter: marco fago
>         Attachments: MYFACES-3613-1.patch
>
>
> 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:p="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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (MYFACES-3613) NPE in composite component when ActionListener is missing in the source

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-3613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Leonardo Uribe updated MYFACES-3613:
------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1.10
                   2.0.16
         Assignee: Leonardo Uribe
           Status: Resolved  (was: Patch Available)
    
> NPE in composite component when ActionListener is missing in the source
> -----------------------------------------------------------------------
>
>                 Key: MYFACES-3613
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3613
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>         Environment: Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716
>            Reporter: marco fago
>            Assignee: Leonardo Uribe
>             Fix For: 2.0.16, 2.1.10
>
>         Attachments: MYFACES-3613-1.patch
>
>
> 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:p="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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (MYFACES-3613) NPE in composite component when ActionListener is missing in the source

Posted by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-3613?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13470519#comment-13470519 ] 

Leonardo Uribe commented on MYFACES-3613:
-----------------------------------------

I have seen this problem many times. The recommended solution until this time is use "targets" syntax:

<cc:interface>
<cc:attribute name="action" targets="mybutton"/>
        <cc:attribute name="value"/>
        <cc:actionSource targets="mybutton"/>
</cc:interface>
<cc:implementation>
<h:commandButton id="mybutton" value="#{cc.attrs.value}" immediate="true">
<cc:insertChildren/>
</h:commandButton>
</cc:implementation> 

This syntax is the one initially designed in JSF 2.0 spec.

But thinking more about it, it sounds reasonable to avoid the NullPointerException on ValueExpressionMethodExpression, which do the "bridge" between source #{cc.attr....} declaration and the ValueExpression chain, that finally ends in the final MethodExpression. In that way, h:commandButton will have a "dummy" invocation, but if you provide a method expression in the composite component attribute map, it will be redirected without any user intervention. 

I can't imagine any side effects doing this change, and it will be friendly for users. Also, there are some cases where this behavior is wanted and "targets" syntax needs to be avoided (non NamingContainer  composite component and inner components with generated ids). According to user reports, it will help with migration from facelets templates to composite components.

If no objections I'll commit the proposed solution soon.
                
> NPE in composite component when ActionListener is missing in the source
> -----------------------------------------------------------------------
>
>                 Key: MYFACES-3613
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3613
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>         Environment: Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716
>            Reporter: marco fago
>         Attachments: MYFACES-3613-1.patch
>
>
> 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:p="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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (MYFACES-3613) NPE in composite component when ActionListener is missing in the source

Posted by "marco fago (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/MYFACES-3613?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13470947#comment-13470947 ] 

marco fago commented on MYFACES-3613:
-------------------------------------

Sounds fair. I agree.
                
> NPE in composite component when ActionListener is missing in the source
> -----------------------------------------------------------------------
>
>                 Key: MYFACES-3613
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3613
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>         Environment: Java 1.7_05 Win32, Servlet3.0, Jetty8.1.5.v20120716
>            Reporter: marco fago
>         Attachments: MYFACES-3613-1.patch
>
>
> 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:p="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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira