Jsf 在字符串值内计算EL表达式
是否可以计算保存在字符串值(例如托管bean变量)中的el表达式 简而言之:是否可以进行双重评估?Jsf 在字符串值内计算EL表达式,jsf,el,Jsf,El,是否可以计算保存在字符串值(例如托管bean变量)中的el表达式 简而言之:是否可以进行双重评估? @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()
@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"/>
@ManagedBean(name=“bean”)
@视域
公共类Bean
{
私有最终字符串name=“bar”;
私有最终字符串nameEl=“foo#{bean.name}foo#{bean.name}”;
公共字符串getName()
{
返回此.name;
}
公共字符串getnamel()
{
把这个还给我;
}
}
输出为:foo{bean.name}foo{bean.name}
希望的输出应该是:foobar foobar
创意:
el函数可以解决这个问题 您可以使用将字符串作为EL表达式求值并获得结果
FacesContext context = FacesContext.getCurrentInstance();
Object result = context.getApplication().evaluateExpressionGet(context, nameEL, Object.class);
// ...
在OmniFaces中,这在课堂上也可用
el表达式和它们之间的其他文本内容也可能多次出现?很抱歉,我的示例对于用例来说不够好。将编辑问题。不知道这是用于检索具有单个el表达式的单个实例。谢谢你的快速回答。我的想法是将cdn资源库url保存到包含丰富html内容的数据库描述列中。但这可能是一个安全风险,即使它不是公共的,因为可以调用函数。但是知道这些信息仍然很重要。如果
nameEL
可由最终用户操作,那么安全风险确实非常高。它允许终端用户执行任意EL表达式。
Object result = Faces.evaluateExpressionGet(nameEL);
// ...