Passando paramentro de navegação ou bean através do facelets

Tenho uma aplicação que utilizo JSF 2 e estou utilizando facelets.
Tenho as seguinte linhas na minha pagina de template

<div> <h:form> <ui:insert name="bt_crud" > <h:commandButton styleClass="botoes" immediate="true" value="${a}" action="${b}"/> </ui:insert> </h:form> </div> e tenho o codigo abaixo na pagina que usa a template

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/principalSec.xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" xmlns:c="http://java.sun.com/jsp/jstl/core" > . . <ui:param name="a" value="Pais" /> <ui:param name="b" value="sec_Pais" /> . . </ui:composition> Porém, ao clicar no botão estou tendo o seguinte erro:

11/11/2011 14:20:02 com.sun.faces.lifecycle.ApplyRequestValuesPhase execute
AVISO: ${b}: javax.el.ELException: /template/principalSec.xhtml @138,103 action="${b}": Identity 'b' does not reference a MethodExpression instance, returned type: java.lang.String
javax.faces.FacesException: ${b}: javax.el.ELException: /template/principalSec.xhtml @138,103 action="${b}": Identity 'b' does not reference a MethodExpression instance, returned type: java.lang.String
javax.servlet.ServletException: javax.el.ELException: /template/principalSec.xhtml @138,103 action="${b}": Identity 'b' does not reference a MethodExpression instance, returned type: java.lang.String

Quando tento fazer isso somente pro value ele funciona, mas se tento fazer pra action, ele da isso, alguem saberia explicar o pq?

Serio mesmo que vocÊ está utilizando algo chamado name=“a” e name=“b”? Ou você mascarou os nomes?

Se for realmente a, b é pq ele não está encontrando ou entando achar um valor parecido em algum managedBean.

Eu realmente estou usando name=“a” e name=“b” apenas para testar mesmo, tanto que quando utilizo o name=“a” no value, ele consegue trazer o valor passado pelo ui:param, porém o name=“b”, ele parece não reconhecer visto que ele é uma action

Quando vocÊ utiliza isso aqui <h:commandButton styleClass=“botoes” immediate=“true” value="${a}" action="${b}"/>

VocÊ está falando que o value vai está ligado a um atributo ManagedBean (MB) e o Action a um método do MB.

Fala cara, vê se isso te ajuda.

O Template

<ui:composition>
	<h:commandButton value="#{msg.label_imprimir}" action="#{actionBeanRelatorio[metodo]}">
		<f:param name="tipoRelatorio" value="1"/>
	<f:setPropertyActionListener target="#{actionBeanRelatorio.tipoRelatorio}" value="1" />
		
	</h:commandButton>
	<h:commandButton value="#{msg.label_exportar}" action="#{actionBeanRelatorio[metodo]}">
		<f:setPropertyActionListener target="#{actionBeanRelatorio.tipoRelatorio}" value="2" />  
	</h:commandButton>
</ui:composition>

Passando o parâmetro

<div align="right">
    <h:panelGroup >
	        <ui:include src="/comum/botoes_relatorio.xhtml">
		<ui:param name="actionBeanRelatorio" value="#{RelAnualEqualizacaoBean}" />
		<ui:param name="metodo" value="gerarRelatorio" />
       </ui:include>
    </h:panelGroup>
</div>

Abraço

Nao consegui entender muito bem como usar o exemplo do ‘Igor Gabriel’, porém percebi que dentro da action dele, ele passa de uma maneira diferenteaction="#{actionBeanRelatorio[metodo]}Tentei usar o mesmo conceito dele e passei

<ui:param name="b" value="#{gravaEventos[navegar]}" />

Obtive o seguinte erro,

Caused by: javax.el.MethodNotFoundException: /template/principalSec.xhtml @138,103 action="${b}": Identity 'b' was null and was unable to invoke

Acho que estou quase resolvendo…

Fabiobh,

tanto o MB quanto o nome do método estou passando por parâmetro depois pois esse template é usado em várias telas com diferentes MB aí passo o MB que está requisitando e o método que eu quero chamar, acho que compliquei demais a pro que você ta precisando, mas era só pra te dar uma idéia hehe.

Abraço.

Consegui utilizando um exemplo q vi num site
no template passei

<h:commandButton styleClass="botoes" immediate="true" value="${a}" action="#{bean[action]}" />

na pagina passei

<ui:param name="a" value="Pais" /> <ui:param name="bean" value="#{gravaEventos}" /> <ui:param name="action" value="navegar" />

meu managed bean so tinha um simples metodo que exibia uma mensagem no console

@ManagedBean
@ViewScoped
public class GravaEventos
...
public void navegar(){
   System.out.println("apareci no console");
}

Vlw gente pela ajuda