【问题标题】:How to avoid redeclaring tag libraries in included JSP files?如何避免在包含的 JSP 文件中重新声明标记库?
【发布时间】:2023-03-17 00:46:01
【问题描述】:

我为自己的 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?

【问题讨论】:

    标签: java jsp include jstl


    【解决方案1】:

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

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

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

    【讨论】:

    • 我没有那样看。我的心态是尽可能少地重复。我也想知道我的解决方案是不是“错误的方式”
    • @Steve 它是 Java,你注定要重复;) 使用动态包含还允许非常简单的模板,而没有 Tiles/SiteMesh/etc 的复杂性。功率较小,但通常绰绰有余。
    • 哈哈。我正在学习春天。 AOP 给我留下了深刻的印象,“新东西”(对我来说)减少了很多代码的其他方式。
    • @Steve AOP 是一个很棒的工具,使用得当。 Spring 的 TX 管理之类的东西非常适合 AOP。 AOP 非常容易被滥用......但很有趣。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多