如何从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 :(得分:9)
自从2009年12月10日(已超过2。5年前)已经推出的EL 2.2以来,它得到了支持。 EL 2.2与Servlet 3.0密切相关,因此如果您使用兼容Servlet 3.0的web.xml
定位Servlet 3.0容器(Tomcat 7,Glassfish 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将显示如何正确使用该功能。