`

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语法以及整合struts2总结

    【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。Velocity将HTML代码与业务逻辑分离,使得开发者可以专注于内容和设计,而不用关心数据如何...

    Velocity中文学习指南

    ### Velocity中文学习指南 #### 一、Velocity简介与应用场景 **Velocity** 是一款基于 Java 的模板引擎 (template engine),它让非技术背景的用户能够轻松地利用模板语言引用由 Java 代码定义的对象。这种能力使得...

    JAVAEE Velocity例子工程

    总结来说,`JAVAEE Velocity例子工程` 提供了一个直接操作 Velocity 的实例,帮助开发者理解如何在JAVAEE环境中有效地利用Velocity进行动态页面生成,无需复杂的配置,便于快速上手和实践。通过研究这个项目,你不仅...

    Velocity从入门到精通

    通过本书的学习,读者不仅可以掌握Velocity的基本用法,还能深入了解MVC设计模式的精髓,并通过具体的示例应用加深对Velocity模板引擎的理解。无论是对于Web开发者还是Web设计者来说,本书都是一个宝贵的资源,能够...

    Velocity

    Velocity 的模板语言非常直观且易于学习。例如,`${variable}` 用于引用Java对象的属性,`#set($var = $value)` 用于设置变量,`#if($condition)` 和 `#else` 用于条件判断,`#foreach($item in $list)` 用于循环...

    Velocity非常容易学会

    总结来说,Velocity提供了丰富的模板语法和功能,使得前端设计师和后端开发人员能够在Web开发中实现高效的协作。通过学习这些基本概念和高级技巧,可以更好地利用Velocity模板引擎来提高Web应用的开发效率和质量。

    Velocity学习指南

    ### Velocity学习指南 #### 1. Velocity 是什么? Velocity 是一款强大的开源模板引擎,它能够帮助开发者轻松地在 Java 应用程序中嵌入动态内容。该引擎支持一种简洁直观的模板语言,即 Velocity 模板语言 (VTL),...

    Velocity脚本简明教程

    ** Velocity脚本简明教程 ** Velocity是一款强大的模板引擎,它是Apache软件基金会的开源项目之一。Velocity被设计用于Web...学习和实践Velocity,你将发现它是一个强大且灵活的工具,可以为你的项目带来诸多便利。

    velocity 学习资料

    总结,Velocity 是一个强大的模板引擎,通过 VTL 提供了高效、安全、易于维护的解决方案,使得开发者能够轻松地将动态数据融入静态页面,提升Web应用的用户体验。熟悉 Velocity 的使用和 VTL 语法对于任何 Java Web ...

    velocity-1.6.2.zip

    总结起来,"velocity-1.6.2.zip" 包含了完整的 Velocity 1.6.2 版本,它是一个强大的模板引擎,可以帮助开发者高效地生成动态内容,同时提供了丰富的文档和示例以便学习和使用。无论是初学者还是经验丰富的开发者,...

    Velocity模板应用案例

    【Velocity模板应用...总结来说,Velocity是一个强大的模板引擎,它简化了Web开发中的动态内容生成,使开发者能够更高效地组织和管理应用的视图层。通过熟练掌握Velocity的使用,可以提升项目的可维护性和开发效率。

    velocity文档

    总结来说,Velocity 是一种强大的模板引擎,它简化了 Web 开发中的视图层实现,通过分离业务逻辑和展示逻辑,提高了开发效率和代码可维护性。通过熟练掌握 Velocity,开发者可以更好地构建高效、安全的 Web 应用程序...

    velocity简单小例子

    总结来说,Velocity小例子主要展示了如何在Java应用中使用Velocity模板引擎生成动态内容。通过学习和实践这个例子,你可以掌握如何定义变量、使用指令和宏,以及如何通过上下文传递数据,从而更好地理解和应用...

    velocity 入门文档及应用源码,很适合做自动代码生成

    Velocity的中文指南是学习Velocity的基础材料,它涵盖了Velocity的基本概念、语法、指令以及模板设计原则等内容。通过阅读这份文档,初学者可以了解到如何创建和使用Velocity模板,以及如何在模板中嵌入Java变量和...

    Velocity之HelloWorld配置

    总结,Velocity提供了一种简单而强大的方式来生成动态内容,通过分离业务逻辑和表示层,促进了代码的可维护性和可扩展性。通过这个“Velocity之HelloWorld配置”,你应该对如何开始使用Velocity有了基本的认识。...

    Velocity用户手册

    1. **简洁易用**:Velocity的语法简单直观,类似于HTML,易于学习和使用。 2. **模板与逻辑分离**:Velocity允许开发者将程序逻辑和视图模板分开,提高代码可维护性。 3. **高效性能**:Velocity在运行时不会重新...

    Velocity学习资料

    ### Velocity学习资料详解 #### 一、Velocity简介与特性 Velocity是一种基于Java的模板引擎,它的设计目的是使得非程序员能够轻松地使用模板语言来引用Java代码定义的对象。相较于JSP和其他视图技术,Velocity在可...

    velocity学习笔记

    【Velocity学习笔记】 Velocity是一个基于Java的模板引擎,它的核心目标是实现Model-View-Controller(MVC)架构,让Web设计师专注于视图设计,而Java开发者负责业务逻辑。通过Velocity,视图模板与Java代码分离,...

    spring mvc mybatis velocity 示范

    Velocity 的语法简洁,易于学习,且执行效率高。 结合使用Spring MVC、MyBatis和Velocity: 在实际项目中,Spring MVC作为控制器层,处理HTTP请求,调用Service层的方法。Service层通常会利用MyBatis的SqlSession...

Global site tag (gtag.js) - Google Analytics