1

通常,我可以访问嵌套 bean 的属性,在这种情况下,address_name如下address所示:

#{customer.address.address_name}

假设,我有一个字符串:

String addressPath = address.address_name

如何address_name使用#{customer}and访问#{addressPath}

我试过了

#{customer[addressPath]}

但它只适用于直接财产。

4

1 回答 1

1

我不知道是否存在执行此操作的标准方法......但我使用在“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 等)有一种方法来做这样的事情。

于 2013-12-19T05:46:49.810 回答