- 浏览: 321523 次
- 性别:
文章分类
最新评论
-
i042416:
分析在哪?
angular分析 -
何盆盆:
你好,请问您这是Extjs3还是Extjs4
ExtJs源码分析与学习—ExtJs事件机制(一) -
124753561:
引用引用引用引用引用[u][u][u][u][i][i][i] ...
Subvision SVN 服务端与客户端的安装 -
谷超:
请问一下例子中itext是什么版本的?
利用iText生成word文档例子参考 -
geosmart:
正好要用到执行字符串中方法,学习了
java中利用反射机制实现调用给定为字符串的方法名
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]语法的索引方式访问数组元素,以及可以查询数组长度。
评论
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)
发表评论
-
排序的种类及java实现
2012-02-08 17:09 0排序的种类有冒泡排序,选择排序,插入排序,稀尔排序,快速排序, ... -
JAVA的public,private,protected访问权限
2012-02-08 16:33 2912Java中的访问权限有public,priva ... -
java Serialization
2012-02-07 16:11 11961. 什么是Serialization?串行化(Serial ... -
TOMCAT内存溢出 - 解决
2009-09-21 16:02 2440Tomcat默认可以使用的内 ... -
Servlet API 中文版
2009-08-10 17:02 1715基本类和接口 一、javax.servlet.Servl ... -
struts2 异常处理
2009-06-05 22:55 1443关键字: struts 2 在学习struts2的过程中,想 ... -
struts2的配置文件
2009-06-05 22:50 1707类型struts2共有4类配置文件, struts. ... -
《Velocity java开发指南》中文版(三)
2009-05-12 22:08 219611.Configuring the Log System(日 ... -
《Velocity java开发指南》中文版(二)
2009-05-12 22:04 27136.Using Velocity In Servlets 1 ... -
《Velocity java开发指南》中文版(一)
2009-05-12 22:00 2859源文见 http://velocity.apache.org ... -
Subvision SVN 服务端与客户端的安装
2009-04-11 17:44 7062一、准备工作1、获取 Su ... -
Struts:logic:iterate用法详解
2009-03-27 14:57 3565Iterate主要用来处理在页面上输出集合类,集合一般来说是下 ... -
weblogic 8.1.4 hibernate3 异常 org.hibernate.hql.ast
2009-03-27 14:55 1622前几天开始写代码,在weblogic 8.1.4上用hiber ... -
WebLogic设置session超时时间
2009-03-27 14:52 3537WebLogic如何设置session超时时间 1 web.x ... -
Spring的四种声明式事务的配置-Hibernate事务
2009-03-20 17:18 1277以下两个bean的配置是下面要用到的。 Xm ... -
NetBeans 6.5 解决内存溢出
2009-03-18 17:19 20951,修改英文netbeans界面字体大小,修改%Netbea ... -
hibernate集合映射inverse和cascade详解
2009-03-06 10:31 10734. hibernate如何根据pojo来更新数据库4.0 在 ... -
RandomAccessFile类 乱码问题的解决
2008-12-11 11:32 5784//用RandomAccessFile读取出来乱码的解决 St ... -
java中一些常用转义字符
2008-12-10 14:37 2372转义序列 标准形式 功能描述 \n NL ... -
在JAVA文件中获取该项目的相对路径
2008-11-08 19:28 18481.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或 ...
相关推荐
【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。Velocity将HTML代码与业务逻辑分离,使得开发者可以专注于内容和设计,而不用关心数据如何...
### Velocity中文学习指南 #### 一、Velocity简介与应用场景 **Velocity** 是一款基于 Java 的模板引擎 (template engine),它让非技术背景的用户能够轻松地利用模板语言引用由 Java 代码定义的对象。这种能力使得...
总结来说,`JAVAEE Velocity例子工程` 提供了一个直接操作 Velocity 的实例,帮助开发者理解如何在JAVAEE环境中有效地利用Velocity进行动态页面生成,无需复杂的配置,便于快速上手和实践。通过研究这个项目,你不仅...
通过本书的学习,读者不仅可以掌握Velocity的基本用法,还能深入了解MVC设计模式的精髓,并通过具体的示例应用加深对Velocity模板引擎的理解。无论是对于Web开发者还是Web设计者来说,本书都是一个宝贵的资源,能够...
Velocity 的模板语言非常直观且易于学习。例如,`${variable}` 用于引用Java对象的属性,`#set($var = $value)` 用于设置变量,`#if($condition)` 和 `#else` 用于条件判断,`#foreach($item in $list)` 用于循环...
总结来说,Velocity提供了丰富的模板语法和功能,使得前端设计师和后端开发人员能够在Web开发中实现高效的协作。通过学习这些基本概念和高级技巧,可以更好地利用Velocity模板引擎来提高Web应用的开发效率和质量。
### Velocity学习指南 #### 1. Velocity 是什么? Velocity 是一款强大的开源模板引擎,它能够帮助开发者轻松地在 Java 应用程序中嵌入动态内容。该引擎支持一种简洁直观的模板语言,即 Velocity 模板语言 (VTL),...
** Velocity脚本简明教程 ** Velocity是一款强大的模板引擎,它是Apache软件基金会的开源项目之一。Velocity被设计用于Web...学习和实践Velocity,你将发现它是一个强大且灵活的工具,可以为你的项目带来诸多便利。
总结,Velocity 是一个强大的模板引擎,通过 VTL 提供了高效、安全、易于维护的解决方案,使得开发者能够轻松地将动态数据融入静态页面,提升Web应用的用户体验。熟悉 Velocity 的使用和 VTL 语法对于任何 Java Web ...
总结起来,"velocity-1.6.2.zip" 包含了完整的 Velocity 1.6.2 版本,它是一个强大的模板引擎,可以帮助开发者高效地生成动态内容,同时提供了丰富的文档和示例以便学习和使用。无论是初学者还是经验丰富的开发者,...
【Velocity模板应用...总结来说,Velocity是一个强大的模板引擎,它简化了Web开发中的动态内容生成,使开发者能够更高效地组织和管理应用的视图层。通过熟练掌握Velocity的使用,可以提升项目的可维护性和开发效率。
总结来说,Velocity 是一种强大的模板引擎,它简化了 Web 开发中的视图层实现,通过分离业务逻辑和展示逻辑,提高了开发效率和代码可维护性。通过熟练掌握 Velocity,开发者可以更好地构建高效、安全的 Web 应用程序...
总结来说,Velocity小例子主要展示了如何在Java应用中使用Velocity模板引擎生成动态内容。通过学习和实践这个例子,你可以掌握如何定义变量、使用指令和宏,以及如何通过上下文传递数据,从而更好地理解和应用...
Velocity的中文指南是学习Velocity的基础材料,它涵盖了Velocity的基本概念、语法、指令以及模板设计原则等内容。通过阅读这份文档,初学者可以了解到如何创建和使用Velocity模板,以及如何在模板中嵌入Java变量和...
总结,Velocity提供了一种简单而强大的方式来生成动态内容,通过分离业务逻辑和表示层,促进了代码的可维护性和可扩展性。通过这个“Velocity之HelloWorld配置”,你应该对如何开始使用Velocity有了基本的认识。...
1. **简洁易用**:Velocity的语法简单直观,类似于HTML,易于学习和使用。 2. **模板与逻辑分离**:Velocity允许开发者将程序逻辑和视图模板分开,提高代码可维护性。 3. **高效性能**:Velocity在运行时不会重新...
### Velocity学习资料详解 #### 一、Velocity简介与特性 Velocity是一种基于Java的模板引擎,它的设计目的是使得非程序员能够轻松地使用模板语言来引用Java代码定义的对象。相较于JSP和其他视图技术,Velocity在可...
【Velocity学习笔记】 Velocity是一个基于Java的模板引擎,它的核心目标是实现Model-View-Controller(MVC)架构,让Web设计师专注于视图设计,而Java开发者负责业务逻辑。通过Velocity,视图模板与Java代码分离,...
Velocity 的语法简洁,易于学习,且执行效率高。 结合使用Spring MVC、MyBatis和Velocity: 在实际项目中,Spring MVC作为控制器层,处理HTTP请求,调用Service层的方法。Service层通常会利用MyBatis的SqlSession...