请勿在 JSP 和 JSF 表达式语言元素中使用 Java 关键字

此规则将标记某些 JSP 表达式语言 (EL) 元素,这些元素包含名称中有 Java 关键字或 EL 保留关键字的变量。

从 WebSphere Application Server V8 开始,表达式语言处理器验证变得更为严格。 会检查 EL 变量标识,以确保它们没有包含 Java 关键字或 EL 保留字。 如果 JSTL/EL 脚本中使用的变量标识包含 Java 关键字或 EL 保留字,那么在运行时,JSP 文件将不进行转换,并且会抛出 com.ibm.ws.jsp.translator.JspTranslationException

此规则将标记任何表达式语言元素,这些元素中的变量包含当前 Java 保留关键字集合中的关键字。

此规则还会标记变量中对 JSP 保留字的使用。

可通过修改 JSP 和 Java 代码以弃用这些保留关键字来解决该问题。 如果此更改的范围太广, 那么可使用一个系统属性来还原至 V8 之前的行为。将 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 V2.3 或更低版本上,对于 Web 模块,会始终禁用表达式语言处理。

有关更多信息,请参阅: