如何访问EL变量并将其作为参数传递给EL中的函数?

时间:2009-12-25 14:27:51

标签: jsf jsp-tags el

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

我想迭代一个数组,并为作为参数传递的数组中的所有值调用函数certificationFor。 我通过以下方式获取数组中的值:

所以基本上我想做的事情如下: $ {teacherBean.certificationFor($ {} particularField) 但我不能这样做。 我可以用其他任何方式做到这一点吗?

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

4 个答案:

答案 0 :(得分:4)

你到底想要做什么以及做什么?只是为了获得展示价值?至少,在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)

答案 1 :(得分:1)

我认为在标准EL中,除了定义包含在EL函数中的函数之外,您没有任何其他选项;

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

但是正如BalusC已经提到的那样,如果你能够使用另一种EL实现,你可以将这种依赖性添加到你的应用中

答案 2 :(得分:0)

怎么样:

${teacherBean.certificationFor(particularField)}

答案 3 :(得分:0)

如果您正在访问一个更好地表达为单独函数的常规功能,那么您可以按如下方式编写它:

${certificationFor[teacherBean][particularField]}

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

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 ....;
  }
}  

诀窍是将你的对象用作地图的链式地图,这是将多个args传递给EL函数的一种方法。

如果您有兴趣,可以在此处查看完整的代码和代码段: http://www.vineetmanohar.com/2010/07/how-to-pass-parameters-in-el-methods/