Preenchendo a lista do Menu com <h:dataTable

Caros,

Estou tentando preencher um menu em tempo de execução. A melhor opção que achei foi com o <h:dataTable. O maior problema que estou tendo é como chamar o método para executar a ação. Cada opção de menu deverá apontar para um método diferente em tempo de execução. Estou postando a parte do meu código que carrega o menu. Alguém pode me dar uma dica.

    <h4>Menu Principal</h4>
       <ul>
		<h:dataTable value="#{usuarioController.listaMenu}" var="lista">
	 		<h:column>
	             <li> 
	                 <h:commandLink action="#{lista.funcionalidade.fuc_Acao}"> //como faço para invocar a ação aqui nesta parte do código???
                 			<h:outputText value="#{lista.funcionalidade.fuc_Descricao}"/>
							
	                 </h:commandLink>
	             </li>
		    </h:column>
		 </h:dataTable>
       </ul>

Obrigado…

Olá!

Aqui eu uso o f:param. A cada iteração do h:dataTable coloco um f:param, assim consigo resgatar qual menu foi acessado através do FacesContext. Desta forma:

JSP

...
    &lt;h4&gt;Menu Principal&lt;/h4&gt;
    <ul>
        &lt;h:dataTable value="#{usuarioController.listaMenu}" var="lista"&gt;
            &lt;h:column&gt;
                <li> 
                    &lt;h:commandLink action="#{lista.funcionalidade.fuc_Acao}"&gt;
                        &lt;h:outputText value="#{lista.funcionalidade.fuc_Descricao}"/&gt;
                        &lt;f:param name="codigoMenu" value="${lista.codigoMenu}" /&gt; //Assumi q cada item terá um código, somente para exemplo
                    &lt;/h:commandLink&gt;
                </li>
            &lt;/h:column&gt;
        &lt;/h:dataTable&gt;
    </ul>
...

No ManagedBean

...
public String irParaMenu(){
    //recupera o codigo do menu clicado
    String parametro = FacesContext.getCurentInstance().getExternalContext().getRequestParameterMap().get("codigoMenu");

    if("codigo1".equals(parametro)){
        //Faz alguma coisa
    }
    else if("codigo2".equals(parametro)){
        //Faz alguma coisa
    }
    else if("codigo3".equals(parametro)){
        //Faz alguma coisa
    }
}
...

Este é o método q eu uso para saber qual menu foi chamado!

Se alguém souber de alguma outra forma mais “bonitinha” de fazer isso, por favor descreva p/ a gente.

[]'s

Olá André…

Acho que entendi a forma como você fez. Já pesquisei muito e não encontrei uma solução para atender esta necessidade. Pelo que eu vi na sua solução, a minha classa controladora usuarioController será a responsável por gerenciar todo a navegação inicial para as outras páginas. Acho que o método irParaMenu deve retornar uma string informando qual página deverá ser renderizada. É isto mesmo??? De qualquer forma, amanhã ou quarta-feira lá na empresa vou tentar implementar esta solução. Vou a postar a resposta aqui, de sucesso eu espero… De qualquer forma, muito obrigado pela ajuda. Até +

Hoi André…

Boa tarde!

Conforme fiquei de postar o resultado aqui, o código funcionou corretamente. Consigo carregar o menu com as funcionalidades que somente o usuário logado tem permissão para ver, de acordo com a configuração de perfil, etc. Acho que foi uma solução simples e fácil de entender. Mais uma vez, obrigado pela ajuda…