评估String值中的EL表达式

时间:2013-07-17 23:36:52

标签: jsf el

是否可以评估在String值中保存的el-expression,例如在托管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函数可以解决这个问题。

1 个答案:

答案 0 :(得分:3)

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

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

在OmniFaces中,这也可以在Faces类中使用。

Object result = Faces.evaluateExpressionGet(nameEL);
// ...