JSP 頁面使用 EL 運算式:
${buildingList[0] != null ? buildingList[0].distance : '' }
Tomcat 6 運行拋出:
org.apache.el.parser.ParseException: Encountered "distance:" at line 1, column 41.
Was expecting: ...
Tomcat 6 自身 EL 解析器 Bug,無法正確解析三元運算子中帶有屬性存取的運算式。其他版本 (Tomcat 5.5、7.0+) 正常。
<!-- 使用 c:choose 標籤替代 -->
<c:choose>
<c:when test="${not empty buildingList and buildingList[0] != null}">
${buildingList[0].distance}
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
${fn:escapeXml(buildingList[0] != null ? buildingList[0].distance : '')}
<%
if (buildingList != null && !buildingList.isEmpty() && buildingList.get(0) != null) {
out.print(buildingList.get(0).getDistance());
}
%>
| Tomcat 版本 | EL 解析器 | 此問題 |
|---|---|---|
| 5.5 | JSP 2.0 / EL 2.0 | 正常 |
| 6.0 | JSP 2.1 / EL 2.1 | Bug 存在 |
| 7.0+ | JSP 2.2+ / EL 2.2+ | 已修復 |
Tomcat 6 已停止維護,強烈建議升級至支援長期維護的版本 (Tomcat 9.0.x 或 10.1.x),解決此 Bug 並獲得安全性更新與效能改進。