Erro em Composite Component

Boa noite caros,

Estou criando um Composite Component e preciso que meu bean seja um atributo.
E estou precisando acessar um método desse bean.

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

<composite:interface>
	<composite:attribute name="bean" required="true"
		type="java.lang.String" />
	<composite:attribute name="update" required="false"
		default=":frmMeio:dt" type="java.lang.String" />
	<composite:attribute name="process" required="false" default="@none"
		type="java.lang.String" />
</composite:interface>

<composite:implementation>
	<p:dialog header="#{msg['dialog.excluir_item']}" id="deleteDialog"
		widgetVar="dialog" resizable="false" width="150" showEffect="explode"
		hideEffect="explode" modal="true">

		<center>
			<p:commandButton value="Sim"
				actionListener="#{cc.attrs.bean['remove']}"
				update="#{cc.attrs.update}" process="#{cc.attrs.process}"
				oncomplete="dialog.hide()" />
			<h:outputText value="" style="margin: 15px;" />
			<p:commandButton value="Não" onclick="dialog.hide()" />
		</center>
	</p:dialog>
</composite:implementation>
</html>

Quanto utilizo ele em uma página, está acontecendo o seguinte erro:

Mai 17, 2012 10:27:59 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
Advertência: #{cc.attrs.bean['remove']}: javax.el.MethodNotFoundException: /resources/components/erp/deletePanel.xhtml @24,64 action="#{cc.attrs.bean['remove']}": Method not found: br.cefetmg.decom.mds.manutencao.action.EquipamentoAction@1b8dcb1.remove()
javax.faces.FacesException: #{cc.attrs.bean['remove']}: javax.el.MethodNotFoundException: /resources/components/erp/deletePanel.xhtml @24,64 action="#{cc.attrs.bean['remove']}": Method not found: br.cefetmg.decom.mds.manutencao.action.EquipamentoAction@1b8dcb1.remove()
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	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:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /resources/components/erp/deletePanel.xhtml @24,64 action="#{cc.attrs.bean['remove']}": Method not found: br.cefetmg.decom.mds.manutencao.action.EquipamentoAction@1b8dcb1.remove()
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 26 more
Caused by: javax.el.MethodNotFoundException: /resources/components/erp/deletePanel.xhtml @24,64 action="#{cc.attrs.bean['remove']}": Method not found: br.cefetmg.decom.mds.manutencao.action.EquipamentoAction@1b8dcb1.remove()
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
	at com.sun.faces.facelets.el.ContextualCompositeMethodExpression.invoke(ContextualCompositeMethodExpression.java:177)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 27 more

Se eu entendi bem você quer usar beans “relativos” ou algo do tipo?

Pode-se usar isso facilmente com ui:param passando um name que será usado para acessar o bean, por exemplo, em um outro composition.

Todos meus beans possuem o método remove.
Esse componente é para evitar duplicação de código.
Ele seria utilizado da sequinte forma

<erp:deletePanel bean=?#{equipamentoAction}? />

Já utilizei isso, porem não quer funcionar dessa vez.

ui:param funcionaria, mas não fica nada elegante e fácil de utilizar

Bom, eu acho o ui:param uma solução viável desde que você abstraia o conteúdo HTML, ou facelet, digamos assim.

Por exemplo, eu tenho uma página onde tenho dois botões “submit” e “reset”, o que acontece, que não precisarei declará-los explicitamente, sempre que minha página herdar o template facelet que tenham esses botões, ele irá saber como acionar o método, desde que, com o ui:param eu passe como parâmetro justamente o meu bean que estou tratando.

E se no caso do managedbean herdar ou estender uma interface que “aplique” o submit e rest, tá tudo feito, então, não mais terei trabalhos.

Claro que há outras alterantivas, usando o @FacesComponent, por exemplo, e você cria um composition que irá ter os dois botões.