我不知道是否存在执行此操作的标准方法......但我使用在“costumer”bean(或范围内的帮助 bean)中创建一个方法,以编程方式评估 EL 表达式。
你可以实现这样的方法:
public class Costumer{
...
public Object eval(String exp) {
//Concatenate your bean name or do it before method call instead
//to get a String with a content like: "customer.address.address_name"
exp = "customer." + exp;
FacesContext facesContext = getFacesContext();
Application appContext = facesContext.getApplication();
ExpressionFactory expFactory = appContext.getExpressionFactory();
ELContext expContext = facesContext.getELContext();
ValueExpression valExp = expFactory.createValueExpression(expContext,exp, Object.class);
return valExp.getValue(expContext);
}
...
}
然后你只需要像这样调用这个方法:
#{customer.eval(addressPath)}
或者 #{customer.eval(myScopedBean.addressPath)}
我认为存在更好的解决方案,也许您的 JSF 框架或组件库(seam、primefaces、richfaces、omnifaces 等)有一种方法来做这样的事情。