此规则将标记某些 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。
如果没有更正,那么此表达式将生成类似于以下内容的运行时错误:
应用程序错误 |
如果禁用了表达式语言处理,那么将不标记 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 模块,会始终禁用表达式语言处理。
有关更多信息,请参阅: