這個規則會標記 JSP taglib 指引,其用於使相同的
prefix 屬性值與不同的 uri 屬性值關聯。 如果重新定義是在同一個 JSP 中進行,或者是透過靜態併入 JSP 檔或片段進行,則會標示重新定義。
不應該在 JSP 的現行範圍內重新定義字首,以符合 JSP 2.1 規格。 如果已使用 JSP 內或者所併入 JSP 或片段內的其他 URI 來定義標籤庫字首,則產品一定會產生轉換錯誤。 JSP 2.1 是 WebSphere Application Server 第 7 版中的新功能。 驗證是該版本中的新增內容,在舊版本中未施行。
最佳作法解決方案是,將 taglib 指引變更為使用唯一字首,以及更新受影響的 JSP 檔來使用新字首。
如果無法變更 JSP 檔,則可透過在 IBM
Web 延伸檔案 (ibm-web-ext.xml) 中設定下列
JSP 屬性,將此 Web 模組的此行為反轉為舊版的行為:
<jsp-attribute name="allowTaglibPrefixRedefinition" value="true"/>
另外,可以設定 Web 儲存器自訂內容 com.ibm.wsspi.jsp.allowtaglibprefixredefinition=true,以影響伺服器上的所有應用程式,而不只是第一個選項提供的特定 Web 模組。
|
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt"%> <%@ taglib uri="/WEB-INF/otherLib.tld" prefix="fmt"%> |
在範例 1 中,將標示第二個項目,因為它是 fmt 的重新定義。 對於此範例,工具會將下列警告訊息記載到 Eclipse 錯誤日誌:
!MESSAGE CWMIG1125W: WebContent/Page1.jsp 檔已嘗試將 fmt 字首的 URI 值從 /WEB-INF/fmt.tld 重新定義為 /WEB-INF/otherLib.tld。 不要使用其他 URI 來重新定義 taglib 字首
規則在分析 MyJspProject 專案中的 /MyJspProject/WebContent/Page1.jsp 檔時發生問題。
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt"%> |
其中,myPage.jspf 包含行
<%@ taglib uri="/WEB-INF/otherLib.tld" prefix="fmt"%> |
在「範例 2」中,將標示 myPage.jspf 中的 taglib 行。 在此範例中,您將看到 Eclipse 錯誤日誌中記載了下列警告:
!MESSAGE CWMIG1124W: WebContent/myPage.jspf 檔已嘗試在 WebContent/Page2.jsp 檔案的範圍內,將 fmt 字首的 URI 值從 /WEB-INF/fmt.tld 重新定義為 /WEB-INF/otherLib.tld。 不要使用其他 URI 來重新定義 taglib 字首
規則在分析 MyJspProject 專案中的 /MyJspProject/WebContent/Page2.jsp 檔時發生問題。
使用錯誤日誌資訊來協助瞭解衝突的檔案。 所併入的 JSP 檔可能會導致重新定義範圍不同的多個基本 JSP 檔。 在此情況下,如果單一修正程式將清除多個問題,則可能會標示一個檔案多次。 同一個併入檔可能以不同方式重新定義標籤庫 URI,取決於包含該併入檔的 JSP 檔。 因此,會列出每個錯誤。
如果要開啟 Eclipse 錯誤日誌,請按一下視窗 > 顯示視圖 > 其他 > 錯誤日誌。
如需相關資訊,請參閱: