2012-06-08 131 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"/>只包括页面的动态响应,而不是它的代码。