此规则将标记某些 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 以还原至先前行为。
${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。
在 servlet V2.3 或更低版本上,对于 Web 模块,会始终禁用表达式语言处理。
有关更多信息,请参阅: