Velocity使用总结
一、载入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使用总结的更多相关文章
- Velocity笔记--使用Velocity获取动态Web项目名的问题
以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- 记录一次bug解决过程:velocity中获取url中的参数
一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...
- velocity中$springMacroRequestContext.getMessage($code)
在Java国际化(i18n)中, vm页面显示内容需要使用 #springMessage("title") 实际运行时发现页面输出$springMacroRequestContex ...
- Velocity 局部定制模板
Velocity介绍 Velocity是一个基于java的template engine.它允许Web designer引用Java Code中定义的方法.Web designer可以和Java工程师 ...
- 只需2分钟,简单构建velocity web项目
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 velocity ...
- Velocity简单语法及VelocityHelper封装
1.简单替换##这是注释Wellcome ${userName}! Now:$date 2.申明变量:#set( $iAmVariable = "good!" )Welcome $ ...
- Velocity 语法(转)
一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...
- springmvc配置多视图 - tiles, velocity, freeMarker, jsp
转自: http://www.cnblogs.com/shanheyongmu/p/5684595.html <!-- Velocity --> <bean id="vel ...
随机推荐
- windows7文件共享 详细步骤 图解
windows7文件共享详细步骤图解 http://wenku.baidu.com/link?url=PROjBfZ0KZFiAlgpb6sdaZBnSzFNTx3Ui_YXs5-IVoKBf2pPN ...
- SQL:四舍五入和截取
四舍五入 , ) 截取 , )
- 行尸走肉第八季/全集The Walking Dead迅雷下载
<行尸走肉第八季>将在10月22号回归播出, 将于5月1日起正式开始拍摄!目前剧组已开始招募客串演员和丧尸群演,第八季拍摄时长初步预计会持续到11月16日.而这三位已确认为<行尸走肉 ...
- 趣谈Java变量的可见性问题
了解过多线程的我们,对synchorized,sleep和valatile都比较了解,但是当这三个名词和“Java变量得可见性”的话题联系在一起不知道大家是否还可以保持大脑清晰??? 最近看到一个关于 ...
- information_schema系列九
information_schema系列九 1:INNODB_SYS_FOREIGN 这个表存储的是INNODB关于外键的元数据信息 Column name Description ID 外键的名 ...
- GPS定位基本原理浅析
位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...
- golang的配置文件操作:viper
参考: 1.http://blog.51cto.com/13599072/2072753 2.https://studygolang.com/articles/14453 3.https://www. ...
- chain33 区块链开发框架诞生记
chain33 诞生记 很多年没有写博客了,应该说,自从2013年开始玩比特币,就没有写过了.这5年来,做了很多事情,也见了很多以前做梦都没有想到过都事情.我做的最开心的事情,也是觉得最有意义的事情, ...
- 5.1 javassist基本使用
假设要使用javassist创建一个类: package com.alibaba.dubbo.demo.test; public class Emp { //属性 private int accoun ...
- centos6.8 mysql5.6.34 root密码重置
1.关闭正在运行的MySQL service mysql stop 2.启动MySQL的安全模式 mysqld_safe --skip-grant-tables 等1分钟如果还没返回的话,新开shel ...