ValueExpression[Resolvido]

Estou montando um menu dinâmico no primefaces (menubar), porém, na propriedade value eu preciso colocar uma expression #{Bean.qualquerCoisa}, só que não consigo fazer aparecer de jeito nenhum esse valor, no meu Bean, o valor dela retorna algo do banco, uma string no caso, mas no menu não aparece essa String, fica em branco apenas.
Como devo fazer?

Obrigado,

Cesar Pizolato

Posta aí a página e sua ManagedBean para tentar te ajudar…

Estou sem o fonte agora, mas fica assim:

Web

<p:menubar model="#{MenuBean.menubar}" />

Bean

menubar.setValue(""); menubar.setValueExpression("");
Não sei o que setar, se é no Value ou ValueExpression, se eu fizer direto em um dos dois value="#{LanguageBean.getTexto(‘TXT_TESTE’)}" ele pega como String.
Precisaria que no Value saísse o retorno de LanguageBean.getTexto(‘TXT_TESTE’) entendeu?
Acredito que devo usar ValueExpression, porém já fiz vários testes com ele e exemplos que encontrei, mas não funciona, o value do menu fica em branco.

Tenta asim:

ValueExpression value = FacesContext.getCurrentInstance().getApplication() .getExpressionFactory().createValueExpression(FacesContext.getCurrentInstance().getELContext(), "#{meuBean.meuMetodo}", this.getClass());

Não sei se vai te ajudar muito…
Também não estou com o código aberto aqui para te mandar exatamente o que fiz…mas lembro que no site de suporte do primefaces achei o preenchimento do model e me ajudou…
Espero que te ajude…

    public class MenuBean { 
         private MenuModel model; 
       
         public MenuBean() { 
             model = new DefaultMenuModel(); 
               
             //First submenu 
             Submenu submenu = new Submenu(); 
             submenu.setLabel("Dynamic Submenu 1"); 
               
             MenuItem item = new MenuItem(); 
             item.setValue("Dynamic Menuitem 1.1"); 
             item.setUrl("#"); 
             submenu.getChildren().add(item); 
               
             model.addSubmenu(submenu); 
               
             //Second submenu 
             submenu = new Submenu(); 
             submenu.setLabel("Dynamic Submenu 2"); 
               
             item = new MenuItem(); 
             item.setValue("Dynamic Menuitem 2.1"); 
             item.setUrl("#"); 
             submenu.getChildren().add(item); 
               
             item = new MenuItem(); 
             item.setValue("Dynamic Menuitem 2.2"); 
             item.setUrl("#"); 
             submenu.getChildren().add(item); 
               
             model.addSubmenu(submenu); 
         } 
           
         public MenuModel getModel() { 
             return model; 
         }     
    }  

E na página a mesma coisa que você fez…

<p:menu model="#{menuBean.model}"/> 

Obrigado pela ajuda de todos.

vi-gb,
Testei como você disse, olhe:

ValueExpression value = FacesContext .getCurrentInstance() .getApplication() .getExpressionFactory() .createValueExpression( FacesContext.getCurrentInstance().getELContext(), "#{IdiomaController.getTexto('TXT_PORFAVOR')}", this.getClass()); //mi.setValueExpression("value", value); mi.setValue(value);
Devo usar no setValueExpression ou no setValue? Ambos dão erro de cast: “ValueExpressionImpl cannot be cast to java.lang.String”, fiz algo errado?

Acho que vc nao pode passar parametros, pode?

Posso sim, se eu fizer isso pelo xhtml normal funciona, exemplo:

<h:outputText value="#{IdiomaController.getTexto('TXT_TITLE')}" />

Alias, uso em vários lugares isso, e já fiz um teste montando o MenuBar manualmente pelo xhtml e funcionou também.

Troque o this.getClass() por String.class

Estava testando isso agora, rsrsrsrsrs… Testei com String.class e Object.class, com nenhum dos 2 ele dá erro, porém fica em branco o valor na web… mesmo eu fazendo ao invez do #{…} uma string qualquer “TESTE” fica em branco também. Idéia?

É, já testei de várias formas assim e não vai. Alguma tem alguma outra idéia? Obrigado.

Alguem ajuda?

Não tenho outra não, posta seu codigo pra eu ver.

Vi, muito obrigado, eu consegui resolver ontem anoite.
Não entendi muito bem o porque, mas, se eu fizer o serID("") antes do setValueExpression("") ele funciona, no meu código estava depois por desatenção, não entendi muito bem a lógica de não funcionar ao contrário, massssssssss… rsrsrsrs. Excelente que funcionou !!

Muito obrigado pela ajuda !!