2012-05-21 32 views
5

如何从EL调用对象的方法?执行和对象的方法从EL

得到该目的:

public class TestObj { 
    public testObj() { }; 

    public String test() { return "foo"; } 
    public String someOtherMethod(String param) { return param + "_bar"; } 
} 

和OBJ被添加到pageContext中

pageContext.setAttribute("t", new TestObj()); 

我将如何执行相当于:

<%= t.test() %> 
<%= t.someOtherMethod("foo") %> 

使用EL?

+0

对于其他人遭受同样愚蠢的错误为我,注意方法调用的圆括号,而不是方的人来访问列表,地图等:有或无以下列形式在EL参数的方法 –

回答

8

自从自2009年12月10日以来EL 2.2已经支持(超过2.5年前已经!),它得到了支持。 EL 2.2齐头并进从Servlet 3.0,所以如果你瞄准一个Servlet 3.0容器(Tomcat 7Glassfish 3等)与一个Servlet 3.0兼容web.xml看起来像如下

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <!-- Config here. --> 

</web-app> 

,那么你就能够调用

${t.test()} 
${t.someOtherMethod('foo')} 
+0

看起来像我的容器正在使用Servlet 2.3。好吧。 – empire29

+0

所以你用于检查Tomcat 5.0?它也可能发生,你实际上运行的是Tomcat 7.0,但是web.xml被错误地声明为符合Servlet 2.3,因此Tomcat 7.0将以Servlet 2.3的后备方式运行。 – BalusC

3

根据此Method calls in EL表达式语言中的方法调用目前处于JSR状态,尚未实现。我使用的是用于JavaBean组件的JST工具来执行一些调用。例如,如果您修改到test方法签名:

public class TestObj { 
    public TestObj() { }; 

    public String getTest() { return "foo"; } 
} 

您可以调用getTest()方法与此语法:现在

${t.test} 

,如果你需要的东西与参数更精细的样passing-你可以使用EL提供的自定义方法功能。这需要在公共类中声明的公共静态方法,也需要一个TLD文件。一个很好的教程可以找到here

更新:

由于@BalusC状态,后规范现在支持方法调用。如果您正在部署到Java EE 6兼容容器,则this Oracle Site将显示如何正确使用该功能。

+1

你已经过时了。 – BalusC

+0

不知道。感谢更新! –