【问题标题】:JSTL or JSP 2.0 EL for getter with argument用于带参数的 getter 的 JSTL 或 JSP 2.0 EL
【发布时间】:2011-04-26 00:35:15
【问题描述】:

如何使用 JSTL 或 JSP 2.0 EL 访问具有参数的 getter?

我想访问这样的东西:

public FieldInfo getFieldInfo(String fieldName) {
 ....
}

我可以使用mapped properties 在Struts 中访问它,但不知道在JSTL 或JSP 2.0 中是否可行。

我尝试了所有方法,但没有成功。

【问题讨论】:

  • 为什么吸气剂会有参数?这闻起来很腥!

标签: java jsp properties jstl


【解决方案1】:

在 EL 中传递方法参数仅受 EL 2.2 支持的 EL 规范。 EL 2.2 默认在 Servlet 3.0 / JSP 2.2 容器中提供。因此,如果您使用的是 Servlet 3.0 容器(Tomcat 7、Glassfish 3、JBoss 6 等)并且您的 web.xml 被声明为符合 Servlet 3.0 规范,那么您应该能够按如下方式访问它

${bean.getFieldInfo('fieldName')}

由于您明确提到了 JSP 2.0,它是旧 Servlet 2.4 规范的一部分,我认为没有升级空间。最好的办法是将方法替换为

public Map<String, FieldInfo> getFieldInfo() {
    // ...
}

以便您可以按如下方式访问它

${bean.fieldInfo.fieldName}

${bean.fieldInfo['fieldName']}

${bean.fieldInfo[otherBean.fieldName]}

【讨论】:

  • 我使用的是 servlet 2.4,无法更改。我无法使用 getFieldInfo 方法修改 bean,并试图避免将其包装在 Map 中或使用自定义标签/函数来访问它。有没有办法通过参数访问它?
  • 这就是坚持旧技术的缺点。如果有另一种方式,我会在答案中提到这一点。但是,您可以提供 Map 的自定义实现,在其中使用某种延迟加载覆盖 get() 方法,这样您就不需要预先填充整个地图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多