在 JSP 中使用 ${pageContext.session.new} 會拋出異常,改為 ${pageContext.session.isNew()} 即正常。根因在於 EL 解析規則與 JavaBean 命名慣例。
${session.id} → 呼叫 getId()(符合 getter 慣例)。${session.new} → 視為屬性存取,嘗試呼叫 getNew()(不存在)。${session.isNew()} → 直接呼叫 isNew() 方法(Boolean 型 getter 慣例)。Tomcat 的 StandardSessionFacade 實作 HttpSession,原始碼中:
public String getId() { ... }
public boolean isNew() { ... }
// 完全沒有 getNew() 方法
isXxx() 命名,EL 直接支援 ${bean.xxx}。getXxx(),EL 仍可用 ${bean.xxx} 存取。${bean.method()}(EL 2.2+ 才支援),建議在後端準備好資料再輸出。理解 EL「屬性存取 = 呼叫 getter」的規則,即可避開此類坑。