我为自己的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?
答案 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"/>
,其中仅包含页面的动态响应,而不包括其代码。