`

velocity学习总结

阅读更多

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 的国际化资源,达到简便实现国际化的方法。

例如,我们在toolbox.xml文件中配置了如下代码

<tool>
<key>msg</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.MessageTool
</class>
</tool>

并且我们有一个编译好了的文件:ApplicationResources_zh_CN.properties。它的内容如下:
name=六月天

在.vm文件中,就可以这样写:${msg.get("name")}

 

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.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]语法的索引方式访问数组元素,以及可以查询数组长度。

分享到:
评论
1 楼 aokunsang 2011-03-28  
这位仁兄,请问个velocity整合spring+strtus2的问题。
applicationContext.xml文件中就添加个
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
		<property name="configLocation">
			<value>WEB-INF/velocity.properties</value>
		</property>
	</bean>


竟然在tomcat启动的时候报错:
信息: Velocimacro : added #springFormCheckboxes(  path options separator attributes ) : source = org/springframework/web/servlet/view/velocity/spring.vm
2011-3-28 17:32:29 org.springframework.ui.velocity.CommonsLoggingLogSystem logVelocityMessage
信息: Velocimacro : added #springShowErrors(  separator classOrStyle ) : source = org/springframework/web/servlet/view/velocity/spring.vm
2011-3-28 17:32:29 org.springframework.ui.velocity.CommonsLoggingLogSystem logVelocityMessage
信息: Velocimacro : added #springCloseTag(  ) : source = org/springframework/web/servlet/view/velocity/spring.vm
2011-3-28 17:32:29 org.springframework.ui.velocity.CommonsLoggingLogSystem logVelocityMessage
严重: Velocimacro : Velocimacro : Error using VM library : org/springframework/web/servlet/view/velocity/spring.vm
2011-3-28 17:32:29 org.springframework.ui.velocity.CommonsLoggingLogSystem logVelocityMessage
严重: java.lang.NumberFormatException: For input string: "0 "
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.<init>(Unknown Source)
at org.apache.commons.collections.ExtendedProperties.getInteger(ExtendedProperties.java:1390)
at org.apache.commons.collections.ExtendedProperties.getInteger(ExtendedProperties.java:1343)
at org.apache.commons.collections.ExtendedProperties.getInt(ExtendedProperties.java:1315)
at org.apache.velocity.runtime.RuntimeInstance.getInt(RuntimeInstance.java:1337)
at org.apache.velocity.runtime.directive.Foreach.init(Foreach.java:327)

相关推荐

    velocity总结

    本文档详细的解析了velocity的语法及其运行机制,通过学习本文档,可以快速全面的了解velocity,并且使用velocity开发项目

    adams函数学习总结

    网上看到的关于adams的函数总结,不错的

    大数据学习总结.doc

    《大数据时代》读后感 学习总结 关于作者 维克托·迈尔-舍恩伯格(Viktor Mayer- Schönberger),他是十余年潜心研究数据科学的技术权威,他是最早洞见大数据时代发 展趋势的数据科学家之一。 关于大数据 大数据是...

    仿照今日头条的主页实现的java web项目

    使用SpringBoot+Mybatis+velocity开发。开发工具和Java语言介绍 内容包括: 开发工具和Java语言 Spring入门,模板语法和渲染 数据库交互iBatis集成 用户注册登录管理 资讯发布,图片上传,资讯首页 评论中心,站内...

    大数据培训心得.docx

    学习总结 大数据培训心得全文共1页,当前为第1页。 大数据培训心得全文共1页,当前为第1页。 大数据的定义 也叫巨量资料,指的是所涉及的资料量规模巨大到无法透过目前主流软件工具,在合理的时间内达到采集、管理 ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或...

    struts2 action 配置方法 &&struts2的配置文件

    struts2 action几乎完全吸收了xwork 的精华,近日学习struts 2,总结一下action的配制方法。struts2相关的配置文件有web.xml(必须的),struts.xml(必须的),struts.properties,struts-default.xml,velocity.properties...

    一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就...

    电子商城系统设计实习报告.doc

    16 7.2 逻辑结构 18 7.2.1 数据表结构详细设计 18 7.2.2 数据库表之间的关系设计 19 8 程序效果展示 20 8.1 前台功能模块 20 8.2 后台功能模块 22 9 实习总结体会 27 实习内容简述 1 实习期间完成的学习内容: 1 ...

    高中生对于大数据发展的思考——我眼中的大数据.docx

    "速度快Velocity":大规模数据的处理对运算能力提出了新的要求。 这里我们从舍恩伯格在《大数据时代》这么书中提到的内容入手,总结的大数据的三个特征。 1、不是随机样本,而是全体数据 过去由于技术、经济、等多个...

    大数据全样而非抽样原理-一文带你了解什么是大数据.pdf

    第⼆个,Velocity,即⾼速,速率快,⼤数据产⽣的速度是很快的,有个知名的说法,即⼤ 数摩尔定律,据测算,现在每两年数据就会翻⼀倍,这个增长量是及其可怕的。第三个,Variety多样性,之前产⽣的数据多半是结构化...

    大数据基础知识入门.pdf

    大数据的特性 大量(Volume) 多样(Variety) 快速(Velocity) 价值(Value) 大数据技术的由来 自 2002 年 数 字 时 代 开 启 以 来,数据呈现海量增长趋势(如图 所示)。特别是在2004年社交媒体 产生后,数据更...

    人工智能与大数据银行.pptx

    人工智能的简述 02 人工智能发展第三次热潮主要源于三个重要因素:计算能力、深度学习算法和大数据的发展; 03 人工智能未来最可能替代掉的是重复性高、规则相对标准化的工作机会,比如客户服务人员、电话销售人员...

    我对大数据的看法.pdf

    总结 我们在学习和了解⼤数据、云计算等过程中,还是要考虑⼀些⽅法来实现。我们有⼤数据,我们要从这些数据中得到我们想要的、对我们有 ⽤的信息,想应对⼤数据时代,数据挖掘这门课就是少不了。简单点来说,⼤...

Global site tag (gtag.js) - Google Analytics