如何使用java表达式语言执行此操作

时间:2009-09-03 08:19:37

标签: java jsp jstl el

我只想说我希望在jsp中使用el:

读取以下java对象
class A {

 Map map = new HashMap();
 int count;

        String getAttribute(String attrName)
        {
                return map.get(attrName);
        }

       String getCount()
       { 
               return count;
      }

}

我可以通过${a.count}

来拨打电话

但是如何使用el调用getAttribute?

4 个答案:

答案 0 :(得分:4)

Java EE 6(例如Glassfish 3将接受$ {a.getAttribute('foo')})支持方法调用,而Java EE 5则不支持。在这里,您需要像这样展示您的地图:

public Map getAttributes() {
  return map;
}

使表达式$ {a.attributes ['foo']})起作用。

如果您在Java EE / JSP之外,可以使用符合EE 6的实现,如JUEL 2.2.x,它支持方法调用。

答案 1 :(得分:3)

你不能!

请参阅guide了解您可以做什么,不做什么。

这背后的原因是el应该是应用程序中的一个薄层,它只是为了呈现目的而访问位于页面后面的数据。

它不应该取代应用程序的业务逻辑。虽然你的 getAttribute 方法非常简单,但是有些人可能会误用它并将其转换为一个执行大量内容的大胖方法,并且在运行时会产生副作用。这正是el想要避免的。

答案 2 :(得分:2)

您需要的是让您的班级实现java.util.Map界面,只需包装内部地图即可。然后您可以使用以下EL表达式:

${a["attribute"]}

答案 3 :(得分:0)

在El 2.x中你可以做到David Rabinowitz所说的伎俩:

${a["attribute"]}