不要在 JSP 及 JSF 表示式語言元素中使用 Java 關鍵字

此規則會標示包含特定變數的 JSP 表示式語言 (EL) 元素,這些變數的名稱含有 Java 關鍵字或 EL 保留關鍵字。

從 WebSphere Application Server 第 8 版開始,表示式語言處理器驗證變得更嚴格。 會檢查 EL 變數 ID 以確保它們不含 Java 關鍵字或 EL 保留字。 如果 JSTL/EL Script 中使用的變數 ID 包含 Java 關鍵字或 EL 保留字,則在執行時期將無法轉換 JSP 檔,並且會擲出 com.ibm.ws.jsp.translator.JspTranslationException

此規則將標示任何包含特定變數的表示式語言元素,這些變數含有任何現行 Java 保留關鍵字集。

此規則也將標示是否在變數中使用了 JSP 保留字

如果要解決此問題,則可以修改 JSP 及 Java 程式碼,以刪除所使用的保留關鍵字。 如果此變更的範圍太廣,則可使用系統內容來回復至第 8 版之前的行為。將 JVM 系統內容 org.apache.el.parser.SKIP_IDENTIFIER_CHECK 設定為 true 值,即可回復至先前的行為。

在下列範例中:
<c:if test="${not empty testObject}">
<c:choose>
<c:when test="${testObject.class.name eq 'SomeValue'}">

會標示表示式語言元素 ${testObject.class.name eq 'SomeValue'},因為變數 testObject.class.name 包含 Java 關鍵字 class

如果未修正,則此表示式將產生類似如下的執行時期錯誤:

Application Error
SRVE0777E: Exception thrown by application class 'com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateElFunction:515'
com.ibm.ws.jsp.translator.JspTranslationException: JSPG0122E: Unable to parse EL function ${testObject.class.name eq 'SomeValue'}.

如果已停用表示式語言處理,則將不會標示 JSP 檔中的元素。

比方說,如果 isELIgnored page 指引設為 true,則停用表示式語言處理。 該規則將不會標示使用此指引標示之 JSP 檔中的元素。

<%@ page isELIgnored="true" %>

表示式語言處理也可以使用 web.xml el-ignored 元素來停用。 在此範例中,此規則將不會標示 webIgnored.jsp。

<jsp-config>
<jsp-property-group>
<url-pattern>webIgnored.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>

對於 Servlet 2.3 版或更低版本的 Web 模組,會一律停用表示式語言處理。

如需相關資訊,請參閱