如何避免在包含的JSP文件中重新标记标记库?

时间:2012-06-08 17:43:30

标签: java jsp include jstl

我为自己的webapp中的所有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中了。我只想把它放在那里。但是当我尝试使用这个sytax时:

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

我从WebLogic 11g收到一条错误消息,指出

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

如何在header.jsp中包含menu.jsp而不必在menu.jsp中包含JSTL?

2 个答案:

答案 0 :(得分:3)

包含动态<jsp:include />)的JSP页面如果使用taglib则必须具有taglib声明,因为它是单独编译的。

静态包含的JSP页面没有相同的限制,因为它被编译到servlet本身。

在使用它的JSP中声明taglib有什么大不了的?这使它成为一个独立的“功能块”,可以在任何地方动态包含,自我记录,而不必担心它所包含的页面:这是分解功能的目标。

答案 1 :(得分:0)

也许指示<%@ include file="page" %>包含页面的源代码,尝试标准操作<jsp:include page="page"/>或JSTL <c:import url="page"/>,其中仅包含页面的动态响应,而不包括其代码。