这真的让我感到惊讶!我在JSP中有以下代码。JSP EL可以直接访问属性
<c:param name="title" value="${slideShow.title}" />
此代码是工作,直到我重构幻灯片类的所有属性的公共和去除getter/setter方法。所以在我看来,EL只适用于getter而不是直接的属性访问。这是真的 ?有没有什么办法让它与直接属性一起工作,而不是通过getter?
这真的让我感到惊讶!我在JSP中有以下代码。JSP EL可以直接访问属性
<c:param name="title" value="${slideShow.title}" />
此代码是工作,直到我重构幻灯片类的所有属性的公共和去除getter/setter方法。所以在我看来,EL只适用于getter而不是直接的属性访问。这是真的 ?有没有什么办法让它与直接属性一起工作,而不是通过getter?
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);
}
谢谢,帮助。我想我会用getter/setter创建一层DTO – Parag 2012-04-12 10:40:51
你使用一些MVC框架,如Spring MVC考虑? – 2012-04-12 09:49:08
@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
@BorisTreukhov无法更改技术堆栈,因为它将用作特定培训的参考。 – Parag 2012-04-12 09:55:40