2012-04-12 70 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