Olá Irei mostrar neste post como montar um menu usando código Java e não a taglib do Rich Faces. Normalmente fariamos assim:

<rich:dropDownMenu>
<rich:menuItem submitMode="server" onclick="document.location.href='index.jsf'">
<h:outputText value="Blue Sky"/>
<a4j:actionparam name="menu" value="blueSky" assignTo="#{MenuMB.skin}"/>
</rich:menuItem>
<rich:menuItem submitMode="server"  onclick="document.location.href='index.jsf'">
<h:outputText value="Japan Cherry"/>
<a4j:actionparam name="menu" value="japanCherry" assignTo="#{MenuMB.skin}"/>
</rich:menuItem>
<rich:menuItem submitMode="server"  onclick="document.location.href='index.jsf'">
<h:outputText value="Deep Marine"/>
<a4j:actionparam name="menu" value="deepMarine" assignTo="#{MenuMB.skin}"/>
</rich:menuItem>
</rich:dropDownMenu>

Para criar os itens do menu dinamicamente usando uma consulta no banco de dados por exemplo fariamos assim:

</code>public void atualizaGrupo(){
menuGrupos = new HtmlMenuGroup();
menuGrupos.setLabelClass("Menu de Skins");
List <Menu>novaLista = MenuDAO.getInstance().buscarMenus();
//
for (Menu menu : novaLista) {
HtmlMenuItem novoMenu = new HtmlMenuItem();
FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
Application app = context.getApplication();
ExpressionFactory expressionFactory = app.getExpressionFactory();
//
MethodExpression me = expressionFactory.createMethodExpression(
context.getELContext(),
"#{MenuMB.exibirMenuSelecionado}", String.class, new Class[] {});
novoMenu.setActionExpression(me);
novoMenu.setValue(menu.getDescricao());
// ---------------------------
HtmlActionParameter htmlparam = new HtmlActionParameter();
ValueExpression valueExpression = expressionFactory.createValueExpression(elContext, "#{MenuMB.skin}", String.class);
htmlparam.setAssignToBinding(valueExpression);
htmlparam.setName("menuGrupo");
htmlparam.setValue(menu.getDescricao());
novoMenu.addActionListener(htmlparam);
novoMenu.setOnclick("document.location.href='index.jsf'");
//
// ---------------------------------
novoMenu.getChildren().add(htmlparam);
menuGrupos.getChildren().add(novoMenu);
}
}<code>

O método exibirMenuSelecionado() é usado apenas para exibir no console o valor do atributo skin.

public void exibirMenuSelecionado(){
System.out.println(" Valor de this.skin: "+ this.skin);
}

No XHTML precisamos desse pequeno código.

<rich:menuGroup  binding="#{MenuMB.menuGrupos}"></rich:menuGroup>

No managed bean é necessário colocar os atributos

private HtmlMenuGroup menuGrupos;
private String skin;

Estou usando a versão 3.2.2.GA. Até mais, Roberto

Share


2 comentários

  1. #
    Valmiro
    setembro 1st, 2009 at 22:11

    Os seus artigos e exemplos são muito bons. Peguei dicas muito interessantes de IREPORT quando precisei. Agora estou às voltas com Richfaces e a necessidade de gerar um menu dinamicamente.
    tentei em
    http://www.furutani.com.br/2009/05/construindo-menu-dinamicamente-com-richfaces/
    e não obtive sucesso. Será que vc poderia montar o seu exemplo com os fontes e disponibilizar.
    Grato,

    Responda a esse comentário
  2. #
    Construindo menu dinamicamente com RichFaces « Caderno da Chris
    maio 11th, 2010 at 14:58

Deixe seu comentário para Construindo menu dinamicamente com RichFaces « Caderno da Chris