2017-08-07 70 views
0

我有一个Menu对象,它有一个方法getCommand(),返回EL表达式。当我从bean构造MenuModel时,我只是简单地使用在JSF中两次推迟EL表达式

menuitem.setCommand(menu.getCommand()); 

它工作正常。

现在,我需要构建一个命令,但是当我在写

<p:commandButton icon="#{menu.icon}" value="#{menu.name}" action="#{menu.getCommand}"

按钮返回存储在菜单而不是调用它的EL表达式。任何想法如何解决这个问题?

+0

如果'getCommand'是一个方法,那么就像getCommand()一样使用它,否则如果它是一个属性'command'的getter,就会像使用它一样。 –

回答

0

这可能是别人的帮助,所以我张贴的解决方案我来(this page是非常有益的):

我实现了一个方法,将解决存储在menu.getCommand表达()使用ELResolver:

public String doAction(String command) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Object result = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), command, Object.class).getValue(context.getELContext()); 
    return result.toString(); 
} 

然后调用它的commandButton:

<p:commandButton icon="#{menu.icon}" value="#{menu.name}" action="#{bean.doAction(menu.getCommand)}"