【问题标题】:how to access a EL variable and pass it as an argument to a function in EL?如何访问 EL 变量并将其作为参数传递给 EL 中的函数?
【发布时间】:2010-12-29 23:51:31
【问题描述】:

我想在一个 bean 上调用一个函数,并在 jsp 中使用 EL 传递一个参数。 问题是它不允许这样的事情: "${teacherBean.certificationFor(${particularField})"

问题是我想遍历一个数组并为数组中作为参数传递的所有值调用函数certificationFor。 我通过以下方式获取数组中的值:

所以基本上我想做类似的事情: ${teacherBean.certificationFor(${particularField}) 但我不能那样做。 我可以用其他方式吗?

我是 EL 的新手。 :) 任何帮助表示赞赏。

【问题讨论】:

    标签: jsf jsp-tags el


    【解决方案1】:

    您究竟想在哪里做这件事,为了什么?只是为了获得展示价值?至少,在 Java EE 6 之前的标准 EL 中,您不能像这样传递方法参数。在JBoss-ELJava EE 6 EL 你可以这样做。那么语法就是:

    ${teacherBean.certificationFor(particularField)}
    

    请注意,您不能嵌套 EL 表达式,EL 表达式本身已经是一个完整的表达式。

    在标准 EL 实现中,您可以使用大括号符号通过键访问 Map 值。因此,例如,如果您有一个 Map<String, String> certifications,其中键对应于 particularField,值对应于关联值:

    private Map<String, String> certifications = new HashMap<String, String>();
    
    public Map<String, String> getCertificationFor() {
        return this.certifications;
    }
    

    那么您可以使用以下符号:

    ${teacherBean.certificationFor[particularField]}
    

    这在幕后解决

    teacherBean.getCertificationFor().get(particularField)
    

    【讨论】:

      【解决方案2】:

      我认为在标准 EL 中,除了定义封装在 EL 函数中的函数外,您别无选择;

      阅读:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html 靠近底部 文档;

      但是正如 BalusC 已经提到的,如果你有能力将这种依赖添加到你的应用程序中,你是否可以使用另一个 EL 实现

      【讨论】:

        【解决方案3】:

        怎么样:

        ${teacherBean.certificationFor(particularField)}
        

        【讨论】:

          【解决方案4】:

          如果您正在访问一个更好地表示为单独函数的通用功能,那么您可以编写如下:

          ${certificationFor[teacherBean][particularField]}
          

          其中 CertificationFor 映射到扩展 ELMethod.java 类的 CertificationFor 类。您在result(Object[] args) 方法中实现功能。此方法的 args 是您传递给 EL 中的 ${certificationFor} 对象的 args。

          public class CertificationFor extends ELMethod {
            public Object result(Object[] args) {  
              TeacherBean teacherBean = (TeacherBean) args[0];  
              String property = (String) args[1];
          
              // your implementation goes here
              return ....;
            }
          }  
          

          诀窍是将您的对象用作映射的链式映射,这是将多个参数传递给 EL 函数的一种方法。

          有兴趣的可以在这里查看完整代码和代码sn-ps: http://www.vineetmanohar.com/2010/07/how-to-pass-parameters-in-el-methods/

          【讨论】:

            猜你喜欢
            • 2013-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-13
            • 2012-02-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多