访问变量EL表达式中的嵌套属性



通常情况下,我可以访问嵌套bean的属性,在这种情况下,addressaddress_name:

#{customer.address.address_name}

比如说,我有一个字符串:

String addressPath = address.address_name

如何用#{customer}#{addressPath}访问address_name ?

I tried

#{customer[addressPath]}

我不知道是否存在这样做的标准方法…但我用创造一种方法进入"消费者"。bean(或作用域内的helper 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等)有一个方法来做这样的事情。

相关内容

  • 没有找到相关文章

最新更新