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

Tomcat 6 EL 運算式三元運算子解析錯誤與解決方案

     編輯:關於JSP

錯誤現象

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+) 正常。

解決方案

方案一:升級 Tomcat 版本 (推薦)

  • 升級至 Tomcat 7.0+ 或 8.0+、9.0+
  • 或降級至 Tomcat 5.5

方案二:改寫 EL 運算式 (不升級時)

<!-- 使用 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>

方案三:使用 JSTL 函數

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
${fn:escapeXml(buildingList[0] != null ? buildingList[0].distance : '')}

方案四:Scriptlet 直接輸出 (不推薦)

<%
  if (buildingList != null && !buildingList.isEmpty() && buildingList.get(0) != null) {
    out.print(buildingList.get(0).getDistance());
  }
%>

版本對照表

Tomcat 版本EL 解析器此問題
5.5JSP 2.0 / EL 2.0正常
6.0JSP 2.1 / EL 2.1Bug 存在
7.0+JSP 2.2+ / EL 2.2+已修復

建議

Tomcat 6 已停止維護,強烈建議升級至支援長期維護的版本 (Tomcat 9.0.x 或 10.1.x),解決此 Bug 並獲得安全性更新與效能改進。

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