2012-06-08 130 views
0

我自己做了一個模板,在我的web應用程序的所有JSP這使事情變得非常簡單:如何避免在包含的JSP文件中重新標記標記庫?

<%@ include file="header.jsp" %> 

<!-- Put unique content here --> 

<%@ include file="footer.jsp" %> 

我決定將我的導航菜單了header.jsp中的到自己的文件,因爲它是越來越大。我把菜單的代碼放到了menu.jsp中。下面是如何包括在我的header.jsp中的容貌:

<html> 
<head> 
    <title>My JSP</title> 
</head> 

    <body> 

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

...... 

然而,引入了menu.jsp不會工作,除非我也把這一行是:

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> 

這已經在我的header.jsp中。我只想不得不把它放在那裏。然而,當我嘗試使用這種替代語法時才:

<%@ include file="menu.jsp" %> 

我得到的WebLogic11克一個錯誤消息,指出

<%@ include file="header.jsp" %> is self refrencing 

我怎麼能包括引入了menu.jsp在header.jsp中,而不必包括JSTL在menu.jsp中?

回答

3

包含JSP頁面動態<jsp:include />)如果它使用taglib,因爲它是單獨編譯的,則必須具有taglib聲明。

靜態包含的JSP頁面沒有相同的限制,因爲它被編譯到servlet本身。

在使用它的JSP中聲明taglib有什麼大不了的地方?這使得它成爲一個獨立的「塊」功能,動態地包含在任何地方,自我記錄,而不用擔心它所包含的頁面:這是分解功能的目標。

+0

我沒有這樣看。我的想法是儘可能少地重複。我也在想,如果我的解決方案是「錯誤的方式」 – Steve

+0

@Steve它是Java,你註定要重複;)使用動態包括也允許真正簡單的模板沒有Tiles/SiteMesh /等的複雜性。力量較小,但往往綽綽有餘。 –

+0

大聲笑。我正在學習春天。 AOP給我留下了非常深刻的印象,其他方式「新東西」(對我來說)正在減少很多代碼。 – Steve

0

也許不是指令<%@ include file="page" %>其中包括頁面的源代碼,嘗試規範動作<jsp:include page="page"/>或JSTL <c:import url="page"/>只包括頁面的動態響應,而不是它的代碼。