从EL执行和对象的方法

时间:2012-05-21 00:23:16

标签: java jsp 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?

2 个答案:

答案 0 :(得分:9)

自从2009年12月10日(已超过2。5年前)已经推出的EL 2.2以来,它得到了支持。 EL 2.2与Servlet 3.0密切相关,因此如果您使用兼容Servlet 3.0的web.xml定位Servlet 3.0容器(Tomcat 7Glassfish 3等),如下所示

<?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>

然后您将能够以下列形式在EL中调用带或不带参数的方法:

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

答案 1 :(得分:3)

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

public class TestObj {
    public TestObj() { };

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

您可以使用以下语法调用getTest()方法:

${t.test}

现在,如果您需要更复杂的参数传递,您可以使用EL提供的自定义方法功能。这需要在公共类中声明的公共静态方法,以及TLD文件。可以找到一个很好的教程here

<强>更新

正如@BalusC所述,后来的规范现在支持方法调用。如果要部署到兼容Java EE 6的容器,this Oracle Site将显示如何正确使用该功能。