JSP:include不呈现包含的文件

时间:2010-10-03 11:14:46

标签: eclipse jsp jsf tomcat icefaces

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

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

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

  1. 使用以下选项创建新的Dynamic Web Project: 目标运行时:Apache tomcat v6.0 动态Web模块版本: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>
    

  4. 一些评论:

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

1 个答案:

答案 0 :(得分:1)

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

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

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

  • JSF是一个基于组件的MVC框架,它提供了输出HTML / CSS / JS的taglibs的组件。

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

<%@ 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>