如何使用java表达式语言实现这一点
假设我有以下java对象,我希望使用el在jsp中读取:如何使用java表达式语言实现这一点,java,jsp,jstl,el,Java,Jsp,Jstl,El,假设我有以下java对象,我希望使用el在jsp中读取: class A { Map map = new HashMap(); int count; String getAttribute(String attrName) { return map.get(attrName); } String getCount() { return count;
class A {
Map map = new HashMap();
int count;
String getAttribute(String attrName)
{
return map.get(attrName);
}
String getCount()
{
return count;
}
}
我可以通过执行${a.count}
但是如何使用el调用getAttribute呢?您不能
看看你能做什么和不能做什么
这背后的原因是,el应该是应用程序中的一个薄层,它只允许访问页面后面的数据以进行表示
它不应该取代应用程序的业务逻辑。虽然您的getAttribute方法非常简单,但有几个人可能会误用它,并将其转换为一个庞大的方法,该方法在运行时执行大量操作并产生副作用。这正是el想要避免的。您需要的是让您的类实现接口,只需包装内部映射即可。然后可以使用以下EL表达式:
${a["attribute"]}
JavaEE6(例如Glassfish 3将接受${a.getAttribute('foo')})支持方法调用,JavaEE5不支持。在这里,您需要如下方式公开地图:
public Map getAttributes() {
return map;
}
使表达式${a.attributes['foo']}工作
如果您在Java EE/JSP之外,可以使用与EE 6兼容的实现,如支持方法调用的JUEL 2.2.x。在El 2.x中,您可以使用David Rabinowitz所说的技巧:
${a["attribute"]}
我更倾向于认为艾尔只是没有被充分考虑。在太多的情况下,它太简单了。请注意,如果该方法仅命名为“get()”,那么他可以使用“a[someThing]”访问它。