此規則會標示使用的 JSP 檔中的 '#{' 序列。
現在在 JSP 2.1 中,語法 #{} 是保留關鍵字。
在 JSP 2.1 中使用包含序列 #{} 的較舊 JSP 檔時,這些 JSP 檔將產生錯誤。
如果要偵測 #{ 序列,必須符合下列條件:
- Servlet 版本(來自 web.xml)必須是 2.4 或更高版本。
- 頁面沒有設定 isELIgnored="true" 的指引。
- 頁面未對映至 <el-ignored> 設為 true 的 <jsp-property-group>(來自 web.xml 中的 <jsp-config>)中的 <url-pattern>。
- 項目 #{ 位於 JSP 範本文字中。
- 項目位於非 JavaServer 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 內容群組設定:開發人員可以將 el-ignored 元素設為 true,根據特定 URL 型樣,停用單一頁面或若干頁面的 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> |
- 針對 EL 延遲語法,以個別頁面為基礎,逐頁進行:將 JSP 頁面指引的 deferred-syntax-allowed-as-literal 屬性設為 true
例如:
|
<%@ page deferredSyntaxAllowedAsLiteral="true" %>
|
優先順序相關附註:
頁面指引的 isELIgnored 和 deferredSyntaxAllowedAsLiteral 屬性優先於 web.xml 中相應的元素和值。
這些頁面指引屬性會置換 web.xml 中相應元素的值。
如需相關資訊,請參閱: