首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

EL 表達式 ${session.new} 報錯,${session.isNew()} 卻正常?

     編輯:程式設計疑難解答

在 JSP 中使用 ${pageContext.session.new} 會拋出異常,改為 ${pageContext.session.isNew()} 即正常。根因在於 EL 解析規則與 JavaBean 命名慣例。

EL 解析機制

  • ${session.id} → 呼叫 getId()(符合 getter 慣例)。
  • ${session.new} → 視為屬性存取,嘗試呼叫 getNew()(不存在)。
  • ${session.isNew()} → 直接呼叫 isNew() 方法(Boolean 型 getter 慣例)。

Tomcat 實作證據

Tomcat 的 StandardSessionFacade 實作 HttpSession,原始碼中:

public String getId() { ... }
public boolean isNew() { ... }
// 完全沒有 getNew() 方法

最佳實務

  1. Boolean 屬性優先用 isXxx() 命名,EL 直接支援 ${bean.xxx}。
  2. 若必須用 getXxx(),EL 仍可用 ${bean.xxx} 存取。
  3. 避免在 EL 中直接寫方法呼叫 ${bean.method()}(EL 2.2+ 才支援),建議在後端準備好資料再輸出。

理解 EL「屬性存取 = 呼叫 getter」的規則,即可避開此類坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved