一、前言
OpenCms系统经常在Jsp模板中使用的标签有文件内容加载标签、属性标签、用户信息标签、传参及包含标签等等,详情见OpenCms入门指南,在体验区可以找到标签配置的详细样例,如下图所示
二、标签示例
用下面标签之前需要在jsp头部声明头部标签库,如下所示,更多标签内容请点击参考其他
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
1. cms:contentload文件加载标签
常见用法加载一个或多个XML资源文件,如下所示,点击详情参考
<cms:contentload collector="singleFile" param="%(opencms.uri)">..</cms:contentload>@b@<cms:contentload collector="allInFolderDateReleasedDesc" param="/sites/test/list/art_%(number).html|v8article"> ..</cms:contentload>
2. cms:property属性标签
<cms:property name="Title" /> -> 读取当前文件的“Title”属性 @b@<cms:property name="Title" file="uri" /> -> 同上 @b@<cms:property name="locale" file="search" /> -> 读取当前文件的“locale”属性,如果没有找到, @b@则向上在其的父亲文件夹中进行查找 @b@<cms:property name="Title" file="search.uri" /> -> 同上 @b@<cms:property name="Title" file="ArtTest.html" /> -> 读取“ArtTest.html”文件的“Title”属性<br/><br/>
3. cms:user用户信息标签
此标签用于访问当前用户的基本信息,用户的基本信息在“管理”视图的“用户管理”中进行维护,用法如下
<cms:user property="firstname"/> -> 取得当前用户的“名”(firstname) @b@ <cms:user property="lastname"/> -> 取得当前用户的“姓”(lastname) @b@ <cms:user property="name"/> -> 取得当前用户的“登录名称”(name) @b@ <cms:user property="email"/> -> 取得当前用户的“邮件地址”(email) @b@ <cms:user property="street"/> -> 取得当前用户的“住址”(street address ) @b@ <cms:user property="zip"/> -> 取得当前用户的“邮政编码”(zip code ) @b@ <cms:user property="description"/> -> 取得当前用户的“描述信息”(description) @b@ <cms:user property="otherstuff"/> -> 取得当前用户的“其它自定义信息”(otherstuff)
4. cms:param参数标签
在其他标签中嵌套使用,用来传递参数,使用形式,如下
<cms:param name="p1" value="xwood"/>和@b@<cms:param name="p1">xwood</cms:param>等效
使用情形示例,如下
1、在使用<cms:img>时,传递相关参数,如:@b@<cms:img width="200" scaleType="1" scaleQuality="60">@b@ <cms:param name="src"><cms:link><c:out value="${curProp}"></cms:link></cms:param>@b@ <cms:param name="alt"><%=ltb.key("art.bild.altText")%></cms:param>@b@</cms:img>@b@2、在使用<cms:include>时使用@b@<cms:include file="../inc/header.jsp">@b@ <cms:param name="locale"><%=locale%></cmd:param>@b@ <cmsparam name="static_1" value="xwood.net" />@b@</cms:include>
5. 获取数据连接jsp页面标签
<%@page import="java.sql.*,org.opencms.db.*,org.opencms.main.*"%>@b@<%@b@java.sql.Connection conn = OpenCms.getSqlManager().getConnection("default");@b@// 你的代码@b@...@b@conn.close();@b@%>
6. 动态导航标签
<%@ page import="java.util.*" %><% @b@org.opencms.jsp.CmsJspActionElement cms = new org.opencms.jsp.CmsJspActionElement(pageContext, request, response);@b@// 为当前文件文件夹下的所有子文件夹和页面创建导航@b@List list = cms.getNavigation().getNavigationForFolder();@b@Iterator i = list.iterator();@b@out.println("<h3>一个简单的导航</h3>");@b@while (i.hasNext()) {@b@ org.opencms.jsp.CmsJspNavElement ne = (org.opencms.jsp.CmsJspNavElement)i.next();@b@ // out.println("<li><a href=/"" + cms.link(ne.getResourceName()) + "/"></a>");@b@ out.println("<li>"+ne.getNavText() + ":"+ne.getResourceName()+"</li>");@b@} @b@out.println("</ul>");@b@@b@%>
7. cms:link当前路径标签
<a href="<cms:link><cms:contentshow element="%(opencms.filename)" /></cms:link>" target="_blank">@b@ <cms:contentshow element="Title"/>@b@</a>@b@@b@创建当前文件夹下资源的正确链接:@b@<cms:link>index.html</cms:link>@b@@b@创建其实文件夹下资源的正确链接:@b@<cms:link>/some/other/folder/index.html</cms:link>@b@@b@创建根文件夹下资源的正确链接:@b@<cms:link>/index.html</cms:link>
8. cms:info标签
获取系统或者JVM等全局信息,用法如下
<cms:info property="opencms.version"/>
详请如下:
opencms系统信息 @b@opencms.version:显示 OpenCms 的版本@b@opencms.url:显示当前文件的 URL@b@opencms.webapp:显示 Web 应用名,Opencms 的安装目录名@b@opencms.webbasepath:显示到 opencms 的安装路径,在本书的环境中@b@为:C:/apache-tomcat-5.5.25/webapps/opencms/@b@opencms.request.uri:显示当前 OpenCms 的请求 UR @b@opencms.request.element.uri:如果该标签用在模版中,则显示模版文件的 URI@b@opencms.request.folder:显示当前的 OpenCms 请求目录@b@JVM系统环境 @b@java.vm.name:显示 Java 虚拟机的名称@b@java.vm.version:显示 Java 虚拟机的版本 @b@java.vm.info:information on Java VM@b@java.vm.vendor:显示 Java 虚拟机的厂商信息@b@os.name:显示操作系统的名称@b@os.version:显统示操作系 的版本@b@os.arch:显示操作系统的架构
9. cms:contentcheck标签
这个标签用来监测 XML 内容文件中指定的内容元素是否存在,用例如下
如果 XML 内容文件有 Author 元素,则显示作者@b@<cms:contentcheck ifexists="Author">@b@ <cms:contentshow element="Author"/> @b@</cms:contentcheck>@b@@b@如果 XML 内容文件没有Author 元素,则显示“佚名”@b@<cms:contentcheck ifexistsnone="Author"> 佚名 </cms:contentcheck>@b@ @b@如果三个主题词元素存在一个,则遍历显示 @b@<cms:contentcheck ifexistsone="Keywords[1],Keywords[2],Keywords[3]">@b@ <cms:contentloop element="Keywords"> @b@ <cms:contentshow/> @b@ </cms:contentloop> @b@</cms:contentcheck>@b@ @b@如果三个主题词元素都不存在,则显示“无主题词” @b@<cms:contentcheck ifexistsnone="Keywords[1],Keywords[2],Keywords[3]">@b@ 无主题词 @b@</cms:contentcheck>
10. cms:contentaccess标签
用来获得当前遍历的XML内容文件的对象,利用该对象可以灵活的访问其中的元素内容,用例如下
<cms:contentload collector="allInFolderDateReleasedDesc" param="/news/article_%(number).html|myarticle|4" editable="true"> @b@ <cms:contentaccess var="content" /> @b@ <c:out value="${content.value['Title']}"/> @b@ <c:out value="${content.value['Author']}"/> @b@ <c:out value="${content.value['Type']}"/> @b@</cms:contentload>@b@@b@完整用例代码:@b@<cms:contentload collector="allInFolderDateReleasedDesc" param="/sites/test/list/art_%(number).html|v8article" editable="true"> @b@<cms:contentaccess var="content" /> @b@<c:out value="${content.value['Title']}"/> @b@<c:if test="${content.value['Title']=='cccccccccccccc'}">@b@ true@b@</c:if>@b@@b@标题: @b@<a href="<cms:link><cms:contentshow element="%(opencms.filename)" /></cms:link>" target="_blank">@b@ <cms:contentshow element="Title"/>@b@</a> @b@内容:<cms:contentshow element="Paragraph/Text"/><br/> @b@</cms:contentload>
11. cms:contentloop标签
用来循环一个数据项的所有数据值,用例如下
<cms:contentloop element="name">@b@ <cms:contentshow />@b@</cms:contentloop>
12. cms:contentshow标签
用于显示XML页面中的一个数据项的值,如下所示
<cms:contentshow element="name"/>@b@<cms:contentshow element="name[0]"/>等效于<cms:contentloop element="name" index="0"/>@b@<cms:contentloop element="name">@b@ <cms:contentshow/>@b@</cms:contentloop>
13. cms:img标签
<cms:img src="/...png" scaleType="0" width="300" height="60" /> @b@说明如下@b@src:图片的路径@b@height:图片缩放后的高度@b@width:缩放后的宽度@b@scaleColor:图片缩放后的背景颜色@b@scaleFilter:图片缩放后背景CSS过滤器filter。@b@scalePosition:图片缩放后的位置 0 全居中 1:下居左 2 下居右 3 下居中 4 左居中 5 右居中 6 上居中 7 上居左 8上居右@b@scaleQuality:图片缩放后的保存质量 值为0-100@b@scaleRenderMode:图片缩放渲染模式。@b@scaleType:图片缩放类型
14. cms:include标签
这个标签用来包含引入VFS中的文件或模版文件中的模版块,用例如下
//含引入一个静态的 HTML 文件@b@<cms:include page="page1.html" />@b@//引入jsp模板文件@b@<cms:include file="page2.jsp" />@b@//包含引入指定的 JSP 文件,并向该文件传递参数@b@<cms:include file="page3.jsp">@b@ <cms:param name="__locale">en</cms:param> @b@ <cms:param name="__param" value="hello world!" /> @b@</cms:include>@b@//包含引入模版中的 foot 模版块(element)@b@<cms:include property="template" element="foot" />