浅谈<cms:contentaccess>标签的使用
来源:互联网 发布:linux rsync安装配置 编辑:程序博客网 时间:2024/05/16 11:34
OpenCms 7.02 新增加了一个非常有用的标签 <cms:contentaccess> ,但是好像官方一直没有给出它的用法的说明。那么今天就浅谈一下这个标签的用法。
也就是说,这个标签主要是让你很容易的在 <cms:contentload> 标签代码段里面使用 JSP 的 EL 表达式来访问 XML 结构化内容。
那么,原来我们访问 XML 内容的时候是什么样一种方式呢?请看下面示例代码(更多的可以查看"/system/modules/org.opencms.frontend.templateone.modules/pages/"下面关于 news,jobs等类型的显示模板的页面代码):
<cms:contentload collector="singleFile" param="%(pageContext.detailfile)" editable="true">
......
<cms:contentshow element="Title" />
......
</cms:contentload>
当然,我举的这个例子可能是比较简单,大家应该都看得出来,就是用来显示文章的一个标题“Title”,也就是xml里面的"Title"节点的值。
在 OpenCms 7.0.2 里面引入<cms:contentaccess>标签以后呢,我们就可以使用下面的方式来使用:
<cms:contentload collector="singleFile" param="%(pageContext.detailfile)" editable="true">
<cms:contentaccess var="content" />
......
<c:out value="${content.value['Title']}"
......
</cms:contentload>
就象上面看到的,在<cms:contentload>代码段中使用 <cms:contentaccess> 标签以后,就可以直接使用类似 <c:out value="${content.value['Title']}" 这样的 JSTL 代码 <c:out> 以及 EL 表达式 ${content.value['Title']} 来输出得到的数据。
也就是说,原来在 OpenCms 的标签,或 JSTL 里面使用 EL 表达式的时候,表达式使用的标量可能是个麻烦事情。就大家在 TemplateOne 的代码里面看到的那样,如果你想使用类似<c:out value="${content.value['Title']}" 这样的方法输出数据,但是没有<cms:contentload> 可用的话,就必须向原来一样使用 <c:set var="Title" value="" /> 这样的语法来定义变量。
可能在这个例子里面还不能体现出来所说的“easy access to XML contents”的好处。
那么,当你使用 <cms:contentshow element="Title" /> 来输出标题的时候,如果标题为空的话,你如何判断呢?只好再去使用 <cms:contentcheck> 标签 <cms:contentcheck ifexists="Title"> 来判断了。而实际上这样的判断使用 JSTL 中的 <c:if test ...> 就可以做到。
譬如,你可以使用
<c:if test="${!content.value['Title'].isEmptyOrWhitespaceOnly}">
<c:out value="${content.value['Title']}" />
</c:if>
来代替下面的这段代码:
<cms:contentcheck ifexists="Title">
<cms:contentshow element="Title" />
</cms:contentcheck>
这样效果会更好一点,为什么这样说呢?因为 contentcheck 的可选值只有:ifexists,ifexistsone,ifexistsall,ifexistsnone。也就是说煤你仅仅可以判断都这一步。而使用<cms:contentload>标签以后,你就可以有更多的选择。
更重要的是,使用这个标签以后,你使用OpenCms做二次开发学习的标签可能就又少了几个,如果你对JSTL和EL已经很熟悉的话,恭喜你,你可以更方便的上手了。
至于这个标签的更详细的用法,有兴趣的可以查看API中 org.opencms.jsp.util.CmsJspContentAccessBean 和org.opencms.jsp.util.CmsJspContentAccessValueWrapper 这两个相关的类,相信会游更大的收获。
顺便说一下,我以前对标签不是很熟悉的时候,使用API来读取和操作XML内容,那可是相对麻烦的事情呢。
所以说,OpenCms 还是越来越好用了。还是 java 开源内容管理系统的老大。所以,我推荐大家使用它!
[王毅原创,转载注明]
在官方的版本说明里面是这样说的:“Added <cms:contentaccess> tag for easy access to XML contents with the JSP EL inside a <cms:contentload> block.”也就是说,这个标签主要是让你很容易的在 <cms:contentload> 标签代码段里面使用 JSP 的 EL 表达式来访问 XML 结构化内容。
那么,原来我们访问 XML 内容的时候是什么样一种方式呢?请看下面示例代码(更多的可以查看"/system/modules/org.opencms.frontend.templateone.modules/pages/"下面关于 news,jobs等类型的显示模板的页面代码):
<cms:contentload collector="singleFile" param="%(pageContext.detailfile)" editable="true">
......
<cms:contentshow element="Title" />
......
</cms:contentload>
当然,我举的这个例子可能是比较简单,大家应该都看得出来,就是用来显示文章的一个标题“Title”,也就是xml里面的"Title"节点的值。
在 OpenCms 7.0.2 里面引入<cms:contentaccess>标签以后呢,我们就可以使用下面的方式来使用:
<cms:contentload collector="singleFile" param="%(pageContext.detailfile)" editable="true">
<cms:contentaccess var="content" />
......
<c:out value="${content.value['Title']}"
......
</cms:contentload>
就象上面看到的,在<cms:contentload>代码段中使用 <cms:contentaccess> 标签以后,就可以直接使用类似 <c:out value="${content.value['Title']}" 这样的 JSTL 代码 <c:out> 以及 EL 表达式 ${content.value['Title']} 来输出得到的数据。
也就是说,原来在 OpenCms 的标签,或 JSTL 里面使用 EL 表达式的时候,表达式使用的标量可能是个麻烦事情。就大家在 TemplateOne 的代码里面看到的那样,如果你想使用类似<c:out value="${content.value['Title']}" 这样的方法输出数据,但是没有<cms:contentload> 可用的话,就必须向原来一样使用 <c:set var="Title" value="" /> 这样的语法来定义变量。
可能在这个例子里面还不能体现出来所说的“easy access to XML contents”的好处。
那么,当你使用 <cms:contentshow element="Title" /> 来输出标题的时候,如果标题为空的话,你如何判断呢?只好再去使用 <cms:contentcheck> 标签 <cms:contentcheck ifexists="Title"> 来判断了。而实际上这样的判断使用 JSTL 中的 <c:if test ...> 就可以做到。
譬如,你可以使用
<c:if test="${!content.value['Title'].isEmptyOrWhitespaceOnly}">
<c:out value="${content.value['Title']}" />
</c:if>
来代替下面的这段代码:
<cms:contentcheck ifexists="Title">
<cms:contentshow element="Title" />
</cms:contentcheck>
这样效果会更好一点,为什么这样说呢?因为 contentcheck 的可选值只有:ifexists,ifexistsone,ifexistsall,ifexistsnone。也就是说煤你仅仅可以判断都这一步。而使用<cms:contentload>标签以后,你就可以有更多的选择。
更重要的是,使用这个标签以后,你使用OpenCms做二次开发学习的标签可能就又少了几个,如果你对JSTL和EL已经很熟悉的话,恭喜你,你可以更方便的上手了。
至于这个标签的更详细的用法,有兴趣的可以查看API中 org.opencms.jsp.util.CmsJspContentAccessBean 和org.opencms.jsp.util.CmsJspContentAccessValueWrapper 这两个相关的类,相信会游更大的收获。
顺便说一下,我以前对标签不是很熟悉的时候,使用API来读取和操作XML内容,那可是相对麻烦的事情呢。
所以说,OpenCms 还是越来越好用了。还是 java 开源内容管理系统的老大。所以,我推荐大家使用它!
- 浅谈<cms:contentaccess>标签的使用
- <cms:contentshow>标签的使用
- <cms:contentloop> 标签的使用
- <cms:contentcheck>标签的使用
- <cms:editable>标签的使用
- 浅谈CMS标签设计思路
- 浅谈CMS标签设计思路
- 帝国cms 万能标签(ecmsinfo)的使用。
- 浅谈fieldset标签的使用
- 对 OpenCms 的 <cms:user> 标签的使用补充
- 帝国CMS模板标签使用
- 新云CMS部分模板标签的使用技巧
- 帝国CMS灵动标签e:loop的使用
- 帝国CMS灵动标签e:loop的使用
- OpenCms的<cms:info>标签
- 帝国cms常用的标签
- sql标签中使用标签变量以及文章的链接-织梦CMS
- 在magento CMS中的标签变量使用
- RMI入门之HelloWorld范例学习
- <cms:contentshow>标签的使用
- Android 4.0 源代码地址
- The <cms:contentinfo> tag
- hdu 1394 inversion number ++ARRAY TREE
- 浅谈<cms:contentaccess>标签的使用
- <cms:contentloop> 标签的使用
- 了解了新东西:CDN
- <cms:contentcheck>标签的使用
- OpenCms JSP标签详解——cms:label标签
- 疯狂Java
- 设计模式学习笔记——创建者模式
- <cms:include> 标签的基本使用方法
- <cms:editable>标签的使用