【问题标题】:JSP:include is not rendering the included fileJSP:include 未呈现包含的文件
【发布时间】:2026-01-09 08:35:01
【问题描述】:

我刚刚创建了一个新的 IceFaces 应用程序,我正在尝试在所有页面中包含一个导航栏。当我使用 jsp:directive.include 标记时,该文件被包含在内,但是当我使用 jsp:include 时,它似乎没有被加载。事实上,当我在浏览器中查看 HTML 源代码时,就像包含的文件完全是空的一样。我不想使用jsp:directive.include,因为它不会自动显示包含文件的任何更新。

我的环境:Eclipse 3.5、Tomcat 6、JSF 1.2、IceFaces 1.8。

重现问题的步骤和代码片段:

  1. 使用以下选项创建一个新的动态 Web 项目: 目标运行时:Apache tomcat v6.0 动态网页模块版本:2.5 配置:ICEfaces 项目

  2. 创建一个新的ICEFaces JSPX 文件——主文件。一些代码:

    <jsp:directive.page contentType="text/html;charset=ISO-8859-1" />
    
    
    <f:view >
        <ice:outputDeclaration doctypeRoot="HTML"
            doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN"
            doctypeSystem="http://www.w3.org/TR/html4/loose.dtd" />
        <html>
        <head>
        <title>test file</title>
        <link rel="stylesheet" type="text/css"
            href="./xmlhttp/css/rime/rime.css" />
        </head>
        <body>
            <jsp:directive.include file="./vertical_navigation.jsp" /> <!-- working -->
            <jsp:include page="./vertical_navigation.jsp" /> <!-- not working, no error though -->
        </body>
        </html>
    </f:view>
    

  3. 创建要包含的文件,也可以作为新的ICEFaces JSPX 文件。简化代码:

        <ice:form>
            <ice:panelGrid columns="1" width="152">
            <ice:graphicImage url="./img/image.jpg"></ice:graphicImage>
            <ice:panelCollapsible expanded="true">
                <f:facet name="header">
                    <ice:panelGroup>
                        <ice:outputText value="Customer"/>
                    </ice:panelGroup>
                </f:facet>
                <ice:panelGrid columns="1">
                    <ice:commandLink action="customer"><ice:outputText value="Customer name" /></ice:commandLink>
                </ice:panelGrid>
            </ice:panelCollapsible>
        </ice:panelGrid>
        </ice:form>
        </body>
        </html>
    </f:view>
    

一些备注:

  1. 我是 JSF 的新手,如有明显错误请见谅。
  2. 在主文件(第一个)中我没有同时使用两个标签。我将两者都粘贴在这里只是为了表明我正在尝试这两个选项。
  3. 我将这两个文件都创建为“ICEFaces JSPX 文件”,但第二个文件的扩展名为 .jsp。
  4. 当我使用directive.include 标签时,会加载包含的文件。但如果我更改它,它不会自动重新发布。

【问题讨论】:

    标签: eclipse jsp jsf tomcat icefaces


    【解决方案1】:

    首先,您必须分离和区分几种技术:

    • JSP 是一种基于 Java 的视图技术,它允许您编写 HTML/CSS/JS 并使用标记库来调用后端 Java 代码和/或控制输出流。

    • JSPX 与 JSP 相同,但强制您以 XML 格式编写代码。特定于 JSP 的标记被 XML 格式的标记替换。 JSPX 也称为“JSP 文档”。 Here 是概述标签差异的基础教程。

    • JSF 是一个基于组件的 MVC 框架,它提供输出 HTML/CSS/JS 的标签库风格的组件。

    您不能在 JSPX 页面中使用 &lt;jsp:include&gt;。您必须将 JSPX 页面转换为 JSP 页面。您需要将文件.jspx 重命名为.jsp 并用JSP 标记替换JSPX 特定标记。下面是 JSP 与 JSF/IceFaces 的启动示例:

    <%@ page pageEncoding="ISO-8859-1" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://www.icesoft.com/icefaces/component" prefix="ice"%>
    <!DOCTYPE html>
    <f:view>
        <html lang="en">
            <head>
                <title>Title</title>
            </head>
            <body>
                <jsp:include page="include.jsp" />
            </body>
        </html>
    </f:view>
    

    【讨论】:

    • 原因对我来说不是很清楚,但我发现一些文档说明我们不应该在 icefaces 中使用 jsp:include:icefaces.org/docs/v1_8_2/htmlguide/devguide/references2.html
    • 因为他们强烈鼓励 XML 标记。对了,你看过Facelets吗?粗略地说,它是 JSPX 的一个扩展,自 Java EE 6 起就是 JSP 的继任者。有一个&lt;ui:include&gt;
    • 是的,我正在尝试使用 Facelets,但我有点困惑。无论如何,我不再使用 jsp:include 了。 jsp:directive.include 工作正常,刷新任何更改的文件并不那么重要。
    最近更新 更多