不要使用其他 URI 來重新定義 taglib 字首

這個規則會標記 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 模組。

範例 1:假定下列行位在同一個稱為 Page1.jsp 的 JSP 檔中
<%@ 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 檔時發生問題。

範例 2:假定一個稱為 Page2.jsp 的 JSP 檔具有下列內容:
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt"%>
<%@ include file="myPage.jspf"%>

其中,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 錯誤日誌,請按一下視窗 > 顯示視圖 > 其他 > 錯誤日誌

如需相關資訊,請參閱: