3

是否可以评估保存在 String 值中的 el 表达式,例如托管 bean 变量中?

简而言之:双重评估可能吗?

@ManagedBean(name = "bean")
@ViewScoped
public class Bean 
{
    private final String name = "bar";
    private final String nameEl = "foo #{bean.name} foo #{bean.name}";

    public String getName()
    {
        return this.name;
    }

    public String getNameEl()
    {
        return this.nameEl;
    }
}

<h:outputText value="#{bean.nameEl}" escape="false"/>

输出为:foo #{bean.name} foo #{bean.name}

并且希望的输出应该是:foo bar foo bar

主意:

一个 el 函数可以解决这个问题。

4

1 回答 1

4

您可以使用Application#evaluateExpressionGet()将字符串评估为 EL 表达式并获取结果。

FacesContext context = FacesContext.getCurrentInstance();
Object result = context.getApplication().evaluateExpressionGet(context, nameEL, Object.class);
// ...

在 OmniFaces 中,这在课堂上也可用Faces

Object result = Faces.evaluateExpressionGet(nameEL);
// ...
于 2013-07-17T23:42:35.230 回答