I'm trying to create a composite component receveing some arguments like my ManagedBean.
This is my composite component:
<composite:interface>
<composite:attribute name="label" required="true"
shortDescription="Valor que será mostrado no campo. Ex: Id" />
<composite:attribute name="methodName" required="true"
shortDescription="Nome do método que realiza o get ao campo. Ex: getId" />
<composite:attribute name="managedBeanName"
type="br.com.jwebbuild.mb.BasicCrudMBImpl" required="true"
shortDescription="Nome do managedBean do componente" />
</composite:interface>
<composite:implementation>
<h:commandLink value="#{cc.attrs.label}"
actionListener="#{cc.attrs.managedBeanName.orderby(cc.attrs.methodName)}"
title="Clique para ordernar">
<f:ajax execute="@this" render="@form" />
</h:commandLink>
<i class="fa fa-bars fa-fw"></i>
</composite:implementation>
When i try to execute i got error: MethodNotFoundException. But if i change this line
actionListener="#{cc.attrs.managedBeanName.orderby(cc.attrs.methodName)}"
for this:
actionListener="#{bancaMB.orderby(cc.attrs.methodName)}"
Everything works fine, but why my composite don't works with cc.attrs ? I have anothers composite components that receive same ManagedBean and works fine.
Look, in this code i'm using this composite component:
<jw:orderColumLink managedBeanName="#{bancaMB}"
methodName="getId" label="Id" />
Edit 1
This code bellow works normal, and use managedBean parameter method:
<composite:interface>
<composite:attribute name="idDataTable" default="dataTableListagem"
shortDescription="ID do DataTable. Usado para referencia em outras partes do código" />
<composite:attribute name="managedBeanName"
type="br.com.jwebbuild.mb.BasicCrudMBImpl" required="true"
shortDescription="Nome do managedBean do componente" />
<composite:attribute name="showSelectAll" type="boolean" default="true"
shortDescription="Mostra a coluna para selecionar todos os registros. Padrão = true" />
<composite:attribute name="showEditRemove" type="boolean"
default="true"
shortDescription="Mostra a coluna para editar e remover um registro. Padrão = true" />
<composite:attribute name="targetPage" type="String"
shortDescription="Caminho para acesso a página de inserção ou alteração do registro." />
</composite:interface>
<composite:implementation>
<div class="table-responsive">
<h:dataTable var="bean" value="#{cc.attrs.managedBeanName.beans}"
id="#{cc.attrs.idDataTable}" styleClass="table table-hover"
binding="#{cc.attrs.managedBeanName.dataTable}">
<h:column rendered="#{cc.attrs.showSelectAll}"
headerClass="smallColumn">
<f:facet name="header">
<h:selectBooleanCheckbox
valueChangeListener="#{cc.attrs.managedBeanName.selectAll}">
<f:ajax execute="@form" render="@form" />
</h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox value="#{bean.selected}">
<f:ajax execute="@this" render="@this" />
</h:selectBooleanCheckbox>
</h:column>
<composite:insertChildren />
<h:column rendered="#{cc.attrs.showEditRemove}"
headerClass="smallColumn">
<h:link styleClass="btn btn-default"
outcome="#{cc.attrs.managedBeanName.redirectAlterarBean(cc.attrs.targetPage,bean.id)}">
<i class="fa fa-pencil-square-o fa-lg"></i> Editar
</h:link>
</h:column>
</h:dataTable>
</div>
<!-- /.table-responsive -->
</composite:implementation>
Edit 2 I'm using "com.sun.faces" JSF 2.2.6 (jsf-api, jsf-impl) Full StackTrace bellow:
Fev 18, 2015 1:44:41 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
Advertência: Method not found: br.com.cardoso.mb.BancaMBImpl@24cc8c62.orderby()
javax.el.MethodNotFoundException: Method not found: br.com.cardoso.mb.BancaMBImpl@24cc8c62.orderby()
at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:225)
at org.apache.el.parser.AstValue.invoke(AstValue.java:253)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1108)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
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 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)
Fev 18, 2015 1:44:41 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
Grave: javax.el.MethodNotFoundException: Method not found: br.com.cardoso.mb.BancaMBImpl@24cc8c62.orderby()
at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:225)
at org.apache.el.parser.AstValue.invoke(AstValue.java:253)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1108)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
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 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)