论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
自己积累的一些关于Velocity的经验
 作者:佚名     2007-3-14 17:34:24        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

最近重构,期间也看《汉武大帝》,但冬冬不好这口,为此经常给他催到找牙,但他好厅长那口,似乎是没完没了,也是,这不年底都到了。

新版Dlog4J绝大部分改用了Velocity来充当View展示层,此中也累积了几点印象深刻的经验,在这里做个简单的介绍:

1)嵌套vm
2)内置对象
3)taglib的改造
4)vm的reload问题
5)exception处理问题
6)数组的访问

1)嵌套vm,在vm中可使用#parse来嵌套另外一个vm,对应的在jsp方面就是嵌套jsp,但嵌套在内的jsp和外部的jsp无法共用变量,非常不方便,而velocity不存在这方面的问题,变量完全共享,如:
->a.vm 里嵌套 b.vm;
->a.vm 里定义了变量 $param;
->b.vm 里可以直接使用$param,无任何限制。
但需要特别注意的是,如果b.vm里同时定义有变量$param,则b.vm里将使用b.vm里定义的值;

2)内置对象
Velocity内置了一些对象,在vm模版里可以直接调用,列举如下:
$request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。

3)taglib的改造
taglib是Struts中一个重要的功能,但也有不足之处,后继参与开发和维护的人员不能很容易的掌握其作用,以及这些特殊的标签容易使页面的美工设计人员不容易处理等等。
如果原来View层编码规范,在jsp中出现的java代码比较少或者没有,则改造到Velocity也就比较容易。

替代taglib的方法很多,也很简便,比如Macro宏,类似JavaBean的使用方式等,而Dlog4J采用了综合的方法,具体说就是使用 ObjectTools extends VelocityTool,并在Velocity的配置文件velocity-toolbox.xml中配置好在模版上的变量名,进而所有的vm模版都可以直接使用ObjectTools,vm模版全部通过ObjectTools来统一访问DAO进而读取数据展示。

4)vm的reload问题
有时会发现vm模版修改后进行新请求时,页面会继续采用更改前的模版,这是因为模版的加载是有一定时间间隔的,如要更改立即生效,需要在velocity-(*).jar 包中,找到\org\apache\velocity\runtime\defaults 目录,更改Velocity默认的配置文件:velocity.properties,修改如下2项:
file.resource.loader.cache,模版文件是否进行缓冲
file.resource.loader.modificationCheckInterval,模版资源的修改检测间隔。
用rar把velocity-(*).jar 解压,得到资源文件后修改再更新回.jar 内。

5)exception处理问题
由于与Struts结合,使用了Velocity工具包:velocity-tools-1.1.jar,其中的org.apache.velocity.tools.view.servlet.VelocityViewServlet 是默认的Velocity处理引擎,所有的异常处理也都交到VelocityViewServlet的error方法处理,没有类似jsp的 errorPage,所以不能对异常进行方便的包装,所以要想封装exception,只有通过改造VelocityViewServlet来实现。

Dlog4J中增加了dlog4j.VelocityServlet,继承VelocityViewServlet并覆盖了error的处理办法,从而实现对异常的封装和包裹。

6)数组访问
对数组的访问在Velocity中存在问题,因为Velocity只能访问对象的方法,而数组又是一个特殊的Array,所以虽然数组可以进行循环列举,但却不能定位访问特定位置的元素,如 strs[2],数组对固定位置元素的访问调用了Array的反射方法get(Object array, int index),而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式来包装,要么就通过公用Util类的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的。

另外在这里值得一提的是,FreeMarker在模板方面,比Velocity有了更多的改进,包括在数组处理方面提供:使用类似[i]语法的索引方式访问数组元素,以及可以查询数组长度。


责任编辑:lss
  相关新闻
用DV摄录自己的故事 “技术活”留给电视台
IT认证:机会只眷顾“逼迫”自己的人
职业生涯:做好自己的职业定位
用windows2000架设自己的FTP SERVER
用JAVA编写自己的机器人,然后一起“厮杀”    cyman2
设计自己的DbUnit
Blog ,News, Rss阅读器的缺点及想法 --  打造自己的新
自己整理的Transact
安全:编写自己的登录与访问控制模块
安装自己的java聊天室
IT认证:机会只眷顾“逼迫”自己的人
用DV摄录自己的故事 “技术活”留给电视台
职业生涯:做好自己的职业定位
自己整理的Transact
安全:编写自己的登录与访问控制模块
如何在数据库代码测试设计自己的DbUnit
设计自己的DbUnit
用JAVA编写自己的机器人,然后一起“厮杀”    cyman2
安装自己的java聊天室
Blog ,News, Rss阅读器的缺点及想法 --  打造自己的新
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号