一、载入Velocity依赖包

<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>

二、Velocity类

package com.qunar.piao.data.integration.common;

import java.io.ByteArrayInputStream;
import java.io.CharArrayWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context; /**
* Velocity引擎帮助类
*
*/
public class VelocityHelper {
/** 单态实例 */
private static final VelocityHelper instance = new VelocityHelper(); /** 私有构造函数 */
private VelocityHelper() {
// 初始化velocity的信息 主要设置一些Velocity的默认属性 // 初始化
try {
Velocity.init();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* <pre>
* 取得实例
* </pre>
*/
public static VelocityHelper getInstance() {
return instance;
} /**
* <pre>
* 渲染:从reader到writer
* </pre>
*
* @param context
* @param writer
* @param reader
* @return
*/
public boolean evaluate(Context context, Writer writer, Reader reader) {
try {
return Velocity.evaluate(context, writer, "", reader);
} catch (Exception e) {
throw new RuntimeException("velocity evaluate error! detail [" + e.getMessage() + "]");
}
} /**
* <pre>
* 通过Map过滤一个输入流
* </pre>
*
* @param map
* @param reader
* @return
*/
@SuppressWarnings("unchecked")
public InputStream evaluate(Map map, Reader reader) {
try {
// 把产生的输出流(字符流),转换成输入流(字节流)
byte[] dataBytes = this.evaluateToWriter(map, reader).toString().getBytes();
return new ByteArrayInputStream(dataBytes);
} catch (Exception e) {
throw new RuntimeException("velocity evaluate error! detial [" + e.getMessage() + "]");
}
} /**
* <pre>
* 通过Map过滤一个输入流
* </pre>
*
* @param map
* @param reader
* @return
*/
@SuppressWarnings("unchecked")
public Writer evaluateToWriter(Map map, Reader reader) {
try {
VelocityContext context = convertVelocityContext(map);
CharArrayWriter writer = new CharArrayWriter();
// 开始评估
this.evaluate(context, writer, reader); return writer;
} catch (Exception e) {
throw new RuntimeException("velocity evaluate error! detail [" + e.getMessage() + "]");
}
} /**
* <pre>
* 取得Velocity系统属性
* </pre>
*
* @param key
* @return
*/
public Object getProperty(String key) {
return Velocity.getProperty(key);
} /**
* <pre>
* 把Map转换成Context
* </pre>
*/
private VelocityContext convertVelocityContext(Map<String, Object> map) {
VelocityContext context = new VelocityContext();
if (map == null) {
return context;
}
for (Map.Entry<String, Object> entry : map.entrySet()) {
context.put(entry.getKey(), entry.getValue());
}
return context;
} /**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("date", "2011-11-21");
map.put("weather", "晴朗 李秋"); Reader reader = new FileReader("D:\\index.vm");
Writer writer = VelocityHelper.getInstance().evaluateToWriter(map, reader); // 今天是:2011-11-21,天气:晴朗 李秋!
System.out.println(writer.toString());
}
}

三、在D盘添加模版文件

今天是:${date},天气:${weather}!

四、运行VelocityHelper

今天是:2011-11-21,天气:晴朗 李秋!

五、Velocity语法总结

5.1 设置变量

#set( $test = $test2 + 3)

#set( $test.a = "abc")

#set( $test.b = 1)

5.2 循环

#foreach($conversionRate in $conversionRateList)
$velocityCount //第几个,从1开始
#foreach($member in $conversionRate.entrySet())
$velocityCount //第几个,从1开始
$member.value //值
#end
#end

5.3 if判断

#if ($foo < 10)
Go North
#elseif ($foo== 10)
Go East
#else
Go West
#end

5.4 字符串截取

$member.value.substring(0,1)

5.5 字符串长度

$!{str.length()}

参考:

http://velocity.apache.org/tools/releases/1.3/generic/

http://www.360doc.com/content/11/1203/22/834950_169480722.shtml

Velocity使用总结的更多相关文章

  1. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

  2. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  3. Velocity初探小结--Velocity在spring中的配置和使用

    最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...

  4. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

  5. velocity中$springMacroRequestContext.getMessage($code)

    在Java国际化(i18n)中, vm页面显示内容需要使用 #springMessage("title") 实际运行时发现页面输出$springMacroRequestContex ...

  6. Velocity 局部定制模板

    Velocity介绍 Velocity是一个基于java的template engine.它允许Web designer引用Java Code中定义的方法.Web designer可以和Java工程师 ...

  7. 只需2分钟,简单构建velocity web项目

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 velocity ...

  8. Velocity简单语法及VelocityHelper封装

    1.简单替换##这是注释Wellcome ${userName}! Now:$date 2.申明变量:#set( $iAmVariable = "good!" )Welcome $ ...

  9. Velocity 语法(转)

    一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...

  10. springmvc配置多视图 - tiles, velocity, freeMarker, jsp

    转自: http://www.cnblogs.com/shanheyongmu/p/5684595.html <!-- Velocity --> <bean id="vel ...

随机推荐

  1. View Programming Guide for iOS_读书笔记

    关于Window的定义的要点 Windows do not have any visible content themselves but provide a basic container for ...

  2. 某个 页面覆盖了 UITabBar 的tabItem的解决办法

    将这个页面的背景色设置为无色: [self.view setBackgroundColor:[UIColor clearColor]]; 或者 self.view.frame = CGRectMake ...

  3. NoSQL现状

    经过了至少4年的激烈争论,现在是对NoSQL的现状做一个阶段性结论的时候了.围绕着NoSQL发生了如此之多的事情,以至于很难对其作出一个简单概括,也很难判断它达到了什么目标以及在什么方面没有达到预期. ...

  4. Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)

    自己记性差,除了老婆.老大和自己的生日以外,一直记不住亲朋好友的生日,长辈们的生日基本上又都是用农历来算,公历的话,直接用Quartz设置循环提醒,农历就没辙了,每每搞的自己很尴尬,需要别人来提醒自己 ...

  5. SharePoint 2016 站点注册工作流服务报错

    前言 安装完SharePoint 2016工作流环境,本来以为万事大吉了,结果给站点注册的时候报错了.搜了很多文章,发现后面要加上-Force参数. 错误截图 使用的为站点注册工作流服务的PowerS ...

  6. WebView入门

    webview是Android展示网页信息的控件,本文就来简要讲解这个控件的用法.关于webview我找到了一些很不错的文章,我就直接贴上连接,自己就不重复造轮子了.本文仅写出我本人目前使用过的东西, ...

  7. ViewPager的简单用法+适配器+监听器的介绍

    之前的actionbar+fragment文章中写过viewpager的简单用法,但因为是融合的文章,所以今天把viewpager提取出来写了.方便查询浏览~ 思路: 1.在布局文件中设置viewpa ...

  8. 自定义各式各样的圆形ProgressBar

         上面三个图分别是 开始时的样子,走进度时候的样子,最后完成的样子 这是我在两个大神的Demo基础上修改后的结果,我们先来看看自定义view是怎么做到的. 1.自己写一个类继承View类,然后 ...

  9. C#如何判断线程池中所有的线程是否已经完成(转)

    其 实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用 ThreadPool.GetAvailableThr ...

  10. VS2008 打开 VS2010解决方案及项目(转)

    第一步,修改解决方案后缀为sln的文件 Microsoft Visual Studio Solution File, Format Version 11.00  # Visual Studio 201 ...