这个动态生成的导航是根据OpenCMS中的Demo完成。
1. 添加模板:在/system/modules/模块名/templates/下添加navtemplate,定义head元素。其中引入模块element文件夹里面的nav.jsp:
<%@ page session="false" %>
<%-- --%>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<% // init %>
<cms:template element="head">
<%-- --%>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OpenCms - <cms:property name="Title" escapeHtml="true" /></title>
<meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=<cms:property name="content-encoding" default="ISO-8859-1" />">
<cms:editable />
</head>
<body>
<!-- Navigation starts here -->
<cms:include file="../elements/book_nav.jsp" />
<!-- Navigation ends here -->
<br clear="all">
<!-- Main page body starts here -->
</cms:template>
2. 添加导航JSP: nav.jsp是遍历文件的核心,在模块element文件夹里面,代码如下:
<%@ page import="org.opencms.jsp.*" %>
<%
// Create a JSP action element
CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
// Some shortcuts to often used Strings
String filename = cms.getRequestContext().getUri();
// List of all pages / subfolders (sorted by NavPos property)
java.util.List list = cms.getNavigation().getNavigationForFolder();
java.util.Iterator i = list.iterator();
// Now build the navigation
out.println("<p class=/"small/">Navigation: ");
while (i.hasNext()) {
CmsJspNavElement ne = (CmsJspNavElement)i.next();
if (! ne.getResourceName().equals(filename)) {
out.println("<a href=/"" + cms.link(ne.getResourceName()) + "/">" + ne.getNavText() + "</a>"); }
else {
out.println(ne.getNavText()); }
if (i.hasNext()) {
out.println(" | "); } }
out.println("</p>");
%>
3. 建立测试页面:切换到/sites/default/,在站点所在目录下建立temp.jsp,页面高级属性中,定义其所用的模板为:/system/modules/模块名/templates/navtemplate
<%@ page session="false" %>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<cms:include property="template" element="head" />
这样,浏览temp.jsp就会根据其所在目录下所有文件的NavText属性显示动态导航了。