博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
velocity模板引擎学习(1)
阅读量:7100 次
发布时间:2019-06-28

本文共 3959 字,大约阅读时间需要 13 分钟。

与、jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本,(注:团队在上也维护了一个版本)对于使用异构技术的团队(即要搞.NET又要搞JAVA),总是希望找一种通用的技术,兼容所有技术平台,以便降低学习成本,无疑velocity是一种值得考虑的选择。

一、与strtus2的集成

1         
2
org.apache.velocity
3
velocity
4
1.7
5
6 7
8
org.apache.velocity
9
velocity-tools
10
2.0
11

pom.xml中加入这二项即可,其它不用刻意配置。struts2同时支持jstl(.jsp)、velocity(.vm)、freemaker(.ftl)三种模板。

 

二、定义变量

1   #set($awbpre='112')2   #set($awbno='89089011')3   #set($airwayBillNo=$awbpre+' - '+$awbno)4   $awbpre - $awbno 
5 $airwayBillNo

velocity的语法符号大概分二类,一类用#开头,代表控制符号,#set表示定义变量,另一类用$开头,通常用于显示变量,上面的示例定义了三个变量:

awbpre 值为'112',awbno值为'89089011',airwayBillNo值为 '112 - 89089011'

第4,5二行输出内容

 

三、遍历数组

1   #set($list = ["CTU", "SHA", "LAX"])2   #foreach ($item in $list)3      $velocityCount . $item 
4 #end

解释:定义了一个数组,然后遍历输出,其中velocityCount为索引变量

 

四、遍历HashTable

1   #foreach($key in $table.keySet())2     $key -> $table.get($key)
3 #end

五、判断集合是否为空

1       #if($null.isNull($orderList.orders) || $orderList.orders.size()==0)2           订单列表为空3       #else4           订单列表:
5 #foreach ($order in $orderList.orders)6 $velocityCount: $order.id / $order.clientName / $order.amount / $order.createTime
7 #end8 #end

六、宏示例

宏可以理解为“函数”,定义一个宏即相当于定义一个子函数,调用宏,即为调用子函数

1     #macro(renderOrderList $orders) 2         
3
4
5
6
7
8
9 #foreach($o in $orders)10
11 #end12
Id ClientName Amount CreateTime
$o.id $o.clientName $o.amount $o.createTime
13 #end14 15 #renderOrderList($orderList.orders)

七、数值、日期格式化

1     $order.createTime
2 $date.year - $date.month - $date.day
3 $date.format('yyyy-MM-dd HH:mm:ss',$order.createTime,$locale)
4 $date.format('MMMdd',$order.createTime,$locale)
5 $convert.toLocale("en_US")
6 $date.format('MMM,dd',$order.createTime,$convert.toLocale("en_US"))
7 $date.format('yyyy-MM-dd',$order.createTime,$locale)
8 $order.amount
9 $number.format('0.00',$order.amount)

要使用格式化功能,需要加一点配置,struts.xml文件中加一行

然后在toolbox.xml中,参考下面的内容:

 
View Code

这些XXXTool其实是一个很好的例子,因为velocity的vm文件里不能直接写java代码,如果我们想扩展一些常用方法,可以将一些常用方法写成XXXTool工具类,然后在toolbox中注册即可。

 

八、国际化

1  当前语言环境:$locale 
2 #stext("name=%{getText('appName')}")

虽然Velocity-Tools 2.0中提供了MessageTool,但是我一直没尝试成功,只能借助struts2本身的标签来处理了。struts2中首先得定义国际化资源文件的BaseName

1 

然后在classPath目录下,放二个文件message_zh_CN.properties、message_en_US.properties,里面放一个appName=XXX的内容,用#stext就能取到国际化的内容了

 

九、使用struts2标签

虽然有了velocity基本上可以告别struts2的那一堆tags,但是如果怀念struts2里的标签,也可以继续使用,方法:以“#s”开头就行了,参考下面的示例:

1 #stextarea ("label=Biography" "name=bio" "cols=20" "rows=3") 
2 #sselect("label=Favourite Color" "list={'Red', 'Blue', 'Green'}" "name=favouriteColor" "emptyOption=true" "headerKey=None" "headerValue=None")

 

十、内建对象

1 $request
2 name = $request.getParameter("name")
3 $session

Velocity可以直接使用struts2的很多内置对象,比如Request、Session、Response,上面的示例演示了如何获取 url请求参数

 

十一、include、parse实现布局模块化

每个页面,通常会有一些公用的头、尾,可以用include或parse来包括其它vm文件(或txt/html文件),这二个的区别在于include只是简单的把其它文件导入进来,不会执行任何vm语法的解析。而parse导入其它vm文件时,如果其它vm文件里有一些指令,比如定义变量,定义宏之类,parse会解析执行。

1 #parse("template/header.vm")2 #include("template/footer.vm")

关于加载的路径,这里要重点解释一下,官方文档上也讲得不清不楚,Velocity支持二种路径加载机制,按classPath或按filePath,默认是按classPath路径加载,即:只要被包含的.vm文件在/WEB-INF/classes目录下即可。上面的示例,将在/WEB-INF/classes/template目录下,搜索header.vm、footer.vm这二个文件,如果找到就加载,否则出错。

最后谈下IDE以.vm的可视化支持问题,目前最新的eclipse上,暂无好用的插件(googlecode上的插件大多已经没人维护了,与最新的eclipse不兼容),建议使用IntelliJ Idea,它对vm的可视化支持程度较好。

 

更详细的用法,请参考下面官司文档:

转载于:https://www.cnblogs.com/chris-oil/p/4453336.html

你可能感兴趣的文章
逛论坛时发现 有关 递归调用
查看>>
JavaScript的3大组成部分&&ECMAScript函数&&闭包
查看>>
.NET Core 跨平台发布(dotnet publish)
查看>>
OpenAcc社区版安装教程(Linux版)(更新版)
查看>>
java写入文件的几种方法
查看>>
NGINX模块(一)
查看>>
Linux service命令
查看>>
TCP发送源码学习(2)--tcp_write_xmit
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
C# 中英文符号互转
查看>>
asp.net2.0安全性(3)--验证与授权--转载来自车老师
查看>>
RegexKitLite 正则
查看>>
GOLANG 常用命令
查看>>
python字符串--下标与切片
查看>>
Dobbo问题及解决方案:forbid-consumer
查看>>
操作系统 实验三 进程调度模拟程序
查看>>
意见汇总
查看>>
Linux系统捕获数据包流程
查看>>
Word中的拼页、书籍折页、反向书籍折页(二)
查看>>
在客户端OS安装SQL Server企业版
查看>>