【问题标题】:Java Unified Expression Language sub-expressionsJava 统一表达式语言子表达式
【发布时间】:2011-05-28 14:27:40
【问题描述】:

我有一个数据表,它提供列表中的对象。在这个数据表中,我想使用像 p:columns(primefaces) 这样的标签,它提供了来自列表的字符串,代表字段的名称。

我现在需要一个子表达式才能使用动态字段名称,例如:

#{entry.#[column.fieldName}}

有没有可能在 JSF2 中做到这一点?

【问题讨论】:

    标签: dynamic jsf-2 el


    【解决方案1】:

    如果条目具有列值的 get/set 访问器,您可以使用以下语法:

    #{entry[column.fieldName]}
    

    在 EL 中,您可以使用两种语法来访问对象的“lastname”属性的值:

    #{myObject.lastname}
    #{myObject["lastname"]}
    

    你可以去JSPIntro at oracle.com看看

    【讨论】:

    • 我刚刚想到了类似的东西并且它起作用了,我只是不确定,因为在参考文献中没有提到术语子表达式,并且在我从未在生产中使用过这种功能之前。
    【解决方案2】:

    不,EL 不能那样工作。

    实现所需功能的方法如下:

    #{entry.getField(column.fieldName)}
    

    其中getField() 是一种使用反射(可能通过PropertyDescriptor)访问具有给定名称的字段的方法。但是,这是 EL 2.2 的功能,因此您需要一个非常新的 EL 实现,例如 Tomcat 7 提供的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多