此规则会标记在 JSP 文件中何处使用了“#{”序列。
在 JSP 2.1 中,语法 #{} 现在是保留关键字。
在 JSP 2.1 中使用包含 #{} 序列的旧 JSP 文件时,这些文件将生成错误。
为了检测到 #{ 序列,必须满足下列条件:
- web.xml 中 Servlet 的版本必须为 2.4 或更高版本。
- 页面中未设置 isELIgnored="true" 伪指令。
- 如果 <el-ignored> 设为 true,页面不会(从 web.xml 中的 <jsp-config>)映射至 <jsp-property-group> 中的 <url-pattern>。
- 条目 #{ 位于 jsp 模板文本中。
- 条目所在的标记不是 Java Server Faces (JSF) 标记。
该规则通过将标记前缀与规则属性(称为“使用这些前缀来绕过标记”)中提供的前缀列表相比较来检测 JSF 标记。
绕过的 JSF 前缀的缺省值为:
h,f,ui,facelet,composite,comp,ez.
注意以下各项:
- 用户应该添加其应用程序所定义的任何其他 JSF 前缀,才能将这些标记忽略。
- 用户应该移除前缀参数中的任何条目(如果 JSP 页面中使用了该前缀),但对于 JSF 标记例外。
- 如果前缀在有些情况下用作 JSF 前缀,而在其他情况下用作一般 JSP 标记,那么用户不应该将此前缀包括在参数列表中,并且应该手动检查所生成的每个结果。
自动修复将在 #{ 语法前添加转义字符。
示例:
|
<h1>This is an example of template text that will be detected: #{detected}</h1>
|
自动修复将把这段代码改为
|
<h1>This is an example of template text that will be detected: \#{detected}</h1>
|
此外,也可以使用不同的方式来取消激活表达式语言 (EL):
- 所有 EL 表达式采用逐页方式:开发人员可以指定 JSP 页面伪指令的 isELIgnored 属性,并将其值设为 true
例如:
|
<%@ page isELIgnored ="true" %>
|
这将关闭该页面的所有 EL 表达式 (即,所有
${exp} and #{exp}
)
- 通过 web.xml 中的 JSP 属性组设置:开发人员可以根据特定 URL 模式,通过将 el-ignored 元素设为 true,取消激活单个页面或几个页面的 EL
例如:
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
|
- 通过 web.xml 中的 JSP 属性组设置,仅取消激活 EL 延迟语法 (#{})
例如:
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<deferred-syntax-allowed-as-literal>true</deferred-syntax-allowed-as-literal>
</jsp-property-group> |
- 通过将 JSP 页面伪指令的 deferred-syntax-allowed-as-literal 属性设为 true,仅对 EL 延迟语法采用逐页方式
例如:
|
<%@ page deferredSyntaxAllowedAsLiteral="true" %>
|
优先顺序注意事项:
页面伪指令的 isELIgnored 和 deferredSyntaxAllowedAsLiteral 属性优先于 web.xml 中各自的元素和值。
这些页面伪指令属性会覆盖 web.xml 中各自元素的值。
有关更多信息,请参阅: