我想在bean上调用一个函数,并在jsp中使用EL传递给它的参数。
问题是它不允许这样的事情:
“${teacherBean.certificationFor(${particularField})
”
我想迭代一个数组,并为作为参数传递的数组中的所有值调用函数certificationFor。 我通过以下方式获取数组中的值:
所以基本上我想做的事情如下: $ {teacherBean.certificationFor($ {} particularField) 但我不能这样做。 我可以用其他任何方式做到这一点吗?
我是EL的新手。 :) 任何帮助表示赞赏。
答案 0 :(得分:4)
你到底想要做什么以及做什么?只是为了获得展示价值?至少,在Java EE 6之前的标准EL中,您无法传递类似的方法参数。在JBoss-EL或Java 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/