2009-11-05 92 views
2

我不是真正熟悉是如何工作的JSP在JSP中是否需要重新聲明包含文件中的標記庫?

但在

main.jsp中的模板有這樣的:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %> 
<jsp:include page="/jsp/common_head.jsp"/> 

然後在common_head.jsp我們這一次:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %> 

這是必要的嗎?

,或者換句話說

現的taglib聲明傳播到包括文件?

+0

包含的文件從來沒有使用過 「獨立」,他們是總是包括在內你永遠不會訪問common_head。jsp直接生成內容的主要html文件 – qodeninja 2009-11-05 19:59:34

回答

5

是的,這是必要的。在第一次執行之前,每個JSP文件將被單獨轉換/翻譯/編譯爲一個獨立的Servlet類。所有標籤將被轉換爲「真實」的Java代碼/方法。如果您沒有聲明taglib,那麼JSP編譯器不知道它需要爲特定標記生成/調用哪些Java代碼/方法。

例如Tomcat,請查看/work文件夾中的所有這些已編譯的JSP文件。查看他們的來源,它會很清楚。

+0

感謝您的反饋。完美的答案。 – qodeninja 2009-11-05 20:13:51

2

由於您包含一個動態資源,該資源是「獨立」的,因此它應該包括您正在使用的任何標記庫。其他問題是,如果您使用這些標籤...

+0

ok,但包含的文件從不使用「獨立」,它們總是包含在內。你永遠不會直接訪問common_head.jsp,因爲它會生成主要html文件 – qodeninja 2009-11-05 19:59:00

+0

的內容,但是你的用法不會影響應該如何聲明它。無論何時訪問它,JSP文件都會被編譯,所以當編譯common_head.jsp時,它應該聲明它需要的所有標記。 – rossoft 2009-11-05 20:03:50

+0

請參閱此評論: http://mail-archives.apache.org/mod_mbox/tomcat-users/200112.mbox/%[email protected]%3E 如果您改爲使用<%@ include .. 。/>,那麼你不需要重新聲明它們,因爲它在編譯時「插入」了 – rossoft 2009-11-05 20:10:02

-3

在其他模板系統中,定義通常會結轉。我不明白爲什麼你應該再次使用它

+0

感謝您的反饋 – qodeninja 2009-11-05 20:13:15

+1

-1這個答案是不正確的。其他三個答案之一(所有這些都是正確的)應該被接受取代。 – 2011-07-19 11:06:39

5

<jsp:include page="/jsp/common_head.jsp"/> 

...標籤是一個動態的包括這意味着動態調用common_head.jsp頁,這是獨立編制的,包括頁面。因此應該需要taglib指令。

如果,另一方面,你是做靜態包括使用包括指令

<%@ include file="/jsp/common_head.jsp" %> 

...該文件將一直複製粘貼,並與從頁面編譯它包括在內。那麼不應該需要taglib指令。

在任何情況下,您可能希望包含taglib,以便獲得編輯器支持您在開發期間使用的標記。

需要注意的是靜態文件靜態包含,即使將jsp:include標籤

包括指令:http://java.sun.com/products/jsp/syntax/1.2/syntaxref129.html#997991

JSP包括:http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

+0

感謝這個信息是非常有用的 – qodeninja 2009-11-05 20:31:32

相關問題