我刚创建了一个新的IceFaces应用程序,我试图在所有页面中包含一个导航栏。当我使用jsp:directive.include
标记时,文件包含在内,但是当我使用jsp:include
时,它似乎没有被加载。事实上,当我在浏览器中检查HTML源代码时,它就像包含的文件完全是空的。我不想使用jsp:directive.include
,因为它不会自动显示所包含文件的任何更新。
我的环境:Eclipse 3.5,Tomcat 6,JSF 1.2,IceFaces 1.8。
重现问题和代码片段的步骤:
使用以下选项创建新的Dynamic Web Project: 目标运行时:Apache tomcat v6.0 动态Web模块版本:2.5 配置:ICEfaces项目
创建一个新的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>
创建要包含的文件,也作为新的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>
一些评论:
directive.include
标记时,会加载包含的文件。但如果我改变它,它不会自动重新发布。 答案 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>