0

我为自己的 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 中了。我只想把它放在那里。但是,当我尝试使用此语法时:

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

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

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

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

4

2 回答 2

3

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

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

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

于 2012-06-08T18:16:49.430 回答
0

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

于 2012-06-08T18:19:19.113 回答