Well, I have the composite component bellow:
<composite:interface> <composite:attribute name="acaoDestino" required="true" shortDescription="Método que será executado quando o usuário clicar no botão 'Sim'." /> </composite:interface> <composite:implementation> <h:commandButton actionListener="#{cc.attrs.acaoDestino}" class="btn btn-primary" value="Sim"> <f:ajax render="@all" execute="@all" /> </h:commandButton> </composite:implementation> When i click in this commandButton an actionListener (acaoDestino) is called twice. In the first call the method runs normal, but in second call i got error:
Jan 31, 2015 7:00:32 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError Grave: javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.acaoDestino}' at com.sun.faces.facelets.tag.TagAttributeImpl$AttributeLookupMethodExpression.invoke(Unknown Source) at javax.faces.event.MethodExpressionActionListener.processAction(Unknown Source) at javax.faces.event.ActionEvent.processListener(Unknown Source) at javax.faces.component.UIComponentBase.broadcast(Unknown Source) at javax.faces.component.UICommand.broadcast(Unknown Source) at javax.faces.component.UIViewRoot.broadcastEvents(Unknown Source) at javax.faces.component.UIViewRoot.processApplication(Unknown Source) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(Unknown Source) at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source) at com.sun.faces.lifecycle.LifecycleImpl.execute(Unknown Source) at javax.faces.webapp.FacesServlet.service(Unknown Source) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at br.com.jwebbuild.filter.LoginFilter.doFilter(LoginFilter.java:73) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Important: I don't expect this actionListener called twice. Another important note is that i'm binding a datatable, i don't know if this can cause this problem.
Edit 1
My acaoDestino is a method in ManagedBean, see:
public void removeSelected() { ... } Using directly in commandButton would be like this:
<h:commandButton actionListener="#{myManagedBean.removeSelected()}" class="btn btn-primary" value="Sim"> <f:ajax render="@all" execute="@all" /> </h:commandButton> Edit 2 (I'm using JSF 2.2.9)
I edited my attribute acaoDestino putting method-signature
<composite:attribute name="acaoDestino" required="true" method-signature="void actionListener()" shortDescription="Método que será executado quando o usuário clicar no botão 'Sim'." /> Now i got the following error:
Advertência: java.lang.IllegalArgumentException: wrong number of arguments javax.el.ELException: java.lang.IllegalArgumentException: wrong number of arguments I'm using composite component inside another composite component, look:
<jw:confirmButton acaoDestino="#{cc.attrs.managedBeanName.removeSelected()}" value="Remover Selecionados" />