2012-04-12 72 views
3

这真的让我感到惊讶!我在JSP中有以下代码。JSP EL可以直接访问属性

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

此代码是工作,直到我重构幻灯片类的所有属性的公共和去除getter/setter方法。所以在我看来,EL只适用于getter而不是直接的属性访问。这是真的 ?有没有什么办法让它与直接属性一起工作,而不是通过getter?

+0

你使用一些MVC框架,如Spring MVC考虑? – 2012-04-12 09:49:08

+1

@BorisTreukhov我使用古老而痛苦的技术 - Struts 1.3 + EJB 3.0。这是一个小型的生产质量项目,将用于一些Struts + EJB + JUnit培训。我读到EJB 3.x实体的一个良好实践是公开这些属性并使用直接属性访问。但是,当我这样做时,JSP开始失败。我正在考虑为视图图层添加另一层DTO的getter/setters。然而,事实上,没有吸气者,EL没有工作让我感到困惑。 – Parag 2012-04-12 09:54:30

+0

@BorisTreukhov无法更改技术堆栈,因为它将用作特定培训的参考。 – Parag 2012-04-12 09:55:40

回答

4

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

其实,你可以了解这是StackOverflow EL tag description

所以有可能调用非getter方法(不是属性),但只有从某些EL vesion:

由于EL 2.2,这是保持作为Servlet 3.0/JSP 2.2(Tomcat 7,Glassfish 3,JBoss AS 6等)的一部分,可以在必要时使用参数调用非getter方法。

E.g. $ {bean.find(param.id)}与

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

谢谢,帮助。我想我会用getter/setter创建一层DTO – Parag 2012-04-12 10:40:51