【问题标题】:Can JSP EL do direct attribute accessJSP EL可以做直接属性访问吗
【发布时间】:2012-04-12 09:46:10
【问题描述】:

这真的让我很惊讶!我的 JSP 中有以下代码。

<c:param name="title" value="${slideShow.title}" />

在我重构 SlideShow 类并公开所有属性并删除 getter/setter 之前,这段代码一直有效。所以在我看来,EL 只适用于 getter 而不是直接属性访问。这是真的 ?有没有办法让它使用直接属性而不是通过getter?

【问题讨论】:

  • 您是否考虑过使用一些 MVC 框架,例如 Spring MVC?
  • @BorisTreukhov 我正在使用古老而痛苦的技术 - Struts 1.3 + EJB 3.0。这是一个小型但生产质量的项目,将用于一些 Struts + EJB + JUnit 培训。我读到 EJB 3.x 实体的一个好做法是公开属性并使用直接属性访问。然而,在我这样做的那一刻,JSP 开始失败。我正在考虑为视图层添加另一层带有 getter/setter 的 DTO。然而,EL 在没有 getter 的情况下无法工作这一事实让我感到困惑。
  • @BorisTreukhov 无法更改技术堆栈,因为它将用作特定培训的参考。
  • 对不起,我误读了我最初认为是关于设置值的问题:-)。

标签: jsp el


【解决方案1】:

JSP EL 严格依赖 Java Bean 规范,因此它不能使用其他约定来访问属性值。

其实你可以读到这个是StackOverflow EL tag description

因此可以调用非 getter 方法(不是属性),但只能从某些 EL 版本调用:

从 EL 2.2 开始,它作为 Servlet 3.0 / JSP 2.2(Tomcat 7、Glassfish 3、JBoss AS 6 等)的一部分进行维护,如果需要,可以使用参数调用非 getter 方法。

例如${bean.find(param.id)} 与

public Something find(String id) {
    return someService.find(id);
}

【讨论】:

  • 感谢您的帮助。我想我会用 getter/setter 创建一层 DTO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2014-05-23
  • 2020-02-13
  • 2013-06-22
  • 2012-01-03
  • 2015-02-01
相关资源
最近更新 更多