是否可以评估在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函数可以解决这个问题。
答案 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);
// ...