模板工具(二)——VelocityTools
来源:互联网 发布:手机淘宝无线端链接 编辑:程序博客网 时间:2024/06/05 17:48
应该算是Velocity的扩展,为了Velocity更好用。包括GenericTools VelocityView VelocityStruts三个子项目,其中VelocityStruts是为了与struts整合服务,此处不介绍。
GenericTools
为j2se提供tools使用,具体tools如下:
DateTool: 对Date操作:格式化、比较等
EscapeTool:对template进行escaping
IteratorTool:更好地控制 #foreach loop
ListTool:透明地处理array和list
MathTool:数学运算
NumberTool:对数字格式化和convert
RenderTool:对VTL的字符串执行 eval
ResourceTool:国际化支持
SortTool:对collections array iterator进行排序
XMLTool:对xml文件读取,需要dom4j的支持
VelocityView
使用velocity快速且干净地构建应用程序,可以编写独立于特定技术的前台程序
包含GenericTool,以及为J2EE扩展的tool;
有VelocityViewServlet VelocityLayoutServlet VelocityViewTag(嵌入velocity到jsp) Maven plugin
VelocityViewServlet
就是一个servlet,用于向vm文件的context中插入 request response context对象。
简单示例
1. 编写vm文件作为页面
<html><body>I'm a velocity template.#if( $XHTML ) #set( $br = "<br />" )#else #set( $br = "<br>" )#endHere we use a custom tool: $toytool.message$brHere we get the date from the DateTool: $date.medium</body></html>
2. Toolbox.xml
被自动加载到velocity的context
<tools> <data type="boolean" key="xhtml" value="true"/> <data type="boolean" key="isSimple" value="true"/> <data type="number" key="version" value="2.0"/> <data key="foo">this is foo</data> <data key="bar">this is bar.</data> <toolbox scope="request"> <tool key="toytool" class="ToyTool" restrictTo="index*"/> </toolbox> <toolbox scope="session"> <tool key="map" class="java.util.HashMap"/> </toolbox></tools>
data用来定义常量, tool获取session和request中的数据
3. 配置web.xml文件
<!-- Define Velocity template compiler --><servlet> <servlet-name>velocity</servlet-name> <servlet-class> org.apache.velocity.tools.view.servlet.VelocityViewServlet </servlet-class> <!-- Unless you plan to put your toolbox.xml and velocity.properties under different folders or give them different names, then these two init-params are unnecessary as of VelocityTools 1.3. The VelocityViewServlet will automatically look for these files in the following locations. --> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.xml</param-value> </init-param> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param></servlet><!-- Map *.vm files to Velocity --><servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern></servlet-mapping>
4. 访问页面
http://localhost:8080/simple/index.vm
Toolbox
定义request session application范围的变量或常量数据,可以调用该变量的方法,使用方法如下:
PipeWrench.java
public class PipeWrench { public String getSize() {return "Large Pipe Wrench!"; }}
ToolBox.xml
<?xml version="1.0"?><toolbox> <tool> <key>wrench</key> <scope>request</scope> <request-path>/catalog/*</request-path> <class>PipeWrench</class> </tool></toolbox>
Tool Scope
支持request session application三种scope,用过flex的人应该很熟悉了,application在系统启动时实例化。 Session在每个会话开始时实例化,request为每个请求
如果tool实现 ViewTool接口,可在init函数中接收到 context对象。
Request-path
限制哪个path下的内容可以访问,只支持request
Parameter
可以像tool中传入参数,需要tool定义public void configure(java.util.Map params)
方法
Data
定义 strings, booleans, and numbers
<?xml version="1.0"?><toolbox> <data type="number"> <key>app_version</key> <value>0.9</value> </data> <data type="string"> <key>app_name</key> <value>Jon's Tool Shop</value> </data> <data type="boolean"> <key>debug</key> <value>true</value> </data></toolbox>
在vm中 $app_version 访问
Tools
AbstractSearchTool:进行查询和分页,需要实现executeQuery方法
PagerTool:基于request的分页
BrowserTool:获取客户端的浏览器、操作系统等相关信息
CookieTool:Cookie的控制
LinkTool:格式化和组装超链接,获取url的相对和绝对路径
ImportTool:以字符串方式导入 url指定的文件
ViewRenderTool:使用当前context执行带VTL的字符串,并以字符串形式返回结果
VelocityLayoutServlet
是VelocityViewServlet的子类,提供了layout和error的支持,特性如下:
1. 修改web.xml 将VelocityViewServlet替换为VelocityLayoutServlet
2. 定义了layou 的vm
3. 使用content vm和layout vm组合生成页面,在layout vm中,使用$screen_context引用content vm。
4. 可选定义 “error” template显示错误
配置
在velocity.properties 中配置# Filepath for error template,# relative to web application root directorytools.view.servlet.error.template = Error.vm# Directory for layout templates,# relative to web application root directorytools.view.servlet.layout.directory = layout/# Filepath of the default layout template# relative to the layout directory# NOT relative to the root directory of the webapp!tools.view.servlet.layout.default.template = Default.vm
动态切换Layout
在url参数中传入 layout=OtherLayout.vm
在内容页面vm中定义 #set($layout=”OtherLayout.vm”)
Error Screen
对未捕获的异常和错误处理,有两个变量 $error_cause和$stack_trace,可以在$error_screen中输出错误信息
Escaping HTML
通过实现 ReferenceInsertionEventHandler 对引用做字符转义,在velocity.properties中配置:
eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement.EscapeHtmlReference
eventhandler.escape.html.match = /msg.*/
VelocityViewTag
是一个jsp tag,允许在jsp中使用velocity和velocity tools,在jsp中使用如下:
<%@taglib prefix="velocity" uri="http://velocity.apache.org/velocity-view" %> <velocity:view template="foo.vm"/>
其他工具
Anakia 是一个用XSL从XML中输出视图的例
Texen:用于产生任意文本的工具,It is capable of producing almost any sort of text output. Driven by Ant, essentially anAnt Task
DocBook Framework:创建适合于online查看和打印的文本,如PDF和HTML
DVSL:类似于XSLT,完成xml文件的转换
- 模板工具(二)——VelocityTools
- 模板工具(1)——Velocity
- PowerDesigner——配置模板(二)
- Delphi工具—反编译Delphi(二)
- 驱动程序开发(二)—工具篇
- Delphi工具—反编译Delphi(二)
- .NET工具篇(二)—GACUtil
- 软件工程 工具之二—— PowerDesigner v12(二)
- 工具 —— c3p0 更新数据模板
- Django学习笔记(二)—— 模板
- 第六周——复数模板类(二)
- 使用模板加快编码效率(二)——TCL
- 【MVC】深入浅出MVC(二)——模板页使用
- QT开发(二十五)——QT模板库
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)
- C++模板与泛型编程(二)——类模板
- 模板优化二——添加模板依赖谁
- 【二】——类模板形参
- 不公平的社会
- Oracle 监听器-------Listener资料
- HDU 1199-Color the Ball
- 浅谈meta标签
- window下自动下载AWS S3 file
- 模板工具(二)——VelocityTools
- uitableview滑动中可能会出现的一个问题
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- 转载]【翻译】Entity Framework 4.1 之六:乐观并发
- 基于面积对比法的图形匹配
- using namespace Gdiplus;
- 不用判断语句如if,?:等来实现比较2个数
- C#网络编程复习文献
- CSS 定义li样式