Velocity 1.7之简单实例
来源:互联网 发布:中国历年gdp增速数据 编辑:程序博客网 时间:2024/06/02 23:01
上面是velocity的官网解释 感觉自己翻译总是不到位 所以直接贴英文算了 记录学习的脚步
下面看看一个简单的示意 演示了velocity的基本特性
需要上面的三个jar包
测试代码 VelocityTest.javapackage com.undergrowth.velocity;import java.io.BufferedWriter;import java.io.IOException;import java.io.StringWriter;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;public class VelocityTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("===============simpleVelocity1测试,使用输出流作为writer=====================");simpleVelocity1();System.out.println("===============simpleVelocity1测试,使用输出流作为writer=====================");System.out.println("===============simpleVelocity2测试,使用字符串输出流作为writer=====================");simpleVelocity2();System.out.println("===============simpleVelocity2测试,使用字符串输出流作为writer=====================");System.out.println("===============simpleVelocity3测试,使用字符串作为模板,字符串输出流作为writer=====================");simpleVelocity3();System.out.println("===============simpleVelocity3测试,使用字符串作为模板,字符串输出流作为writer=====================");}//使用输入字符串作为模板private static void simpleVelocity3() {// TODO Auto-generated method stubString strVelocity="显示 $project 名称";VelocityContext context=new VelocityContext();context.put("project", VelocityTest.class.getName());StringWriter writer=new StringWriter();Velocity.evaluate(context, writer, "输入字符串作为模板", strVelocity);System.out.println(writer);}//简单测试2private static void simpleVelocity2() {// TODO Auto-generated method stub//改变velocity资源的查找路径VelocitySimple velocitySimple=new VelocitySimple();VelocityContext vcContext=velocitySimple.createVelocityContext();//使用字符串输出流StringWriter writer=new StringWriter();Velocity.mergeTemplate("velocity.vm", "utf-8", vcContext, writer);System.out.println(writer);}//简单测试1private static void simpleVelocity1() {VelocitySimple velocitySimple=new VelocitySimple();VelocityContext vcContext=velocitySimple.createVelocityContext();//使用控制台作为输出流BufferedWriter writer=velocitySimple.createBufferedWriter();Template template=velocitySimple.createTemplate("velocity.vm");template.merge(vcContext, writer);try {writer.flush();//这里如果正式开发的话 需要将输出流关闭 但是因为这里选择是控制台 如果关闭的话 后面的测试方式的输出信息就没有了//writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
velocity的封装类VelocitySimple.java
package com.undergrowth.velocity;import java.io.BufferedWriter;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.Properties;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;import org.apache.velocity.app.VelocityEngine;public class VelocitySimple {public VelocitySimple(){//如果不修改velocity的资源查找路径的话 即要将模板文件放在项目的目录下 即和src属于一个目录级别changeVelocityResourceLoaderPath();}//改变Velocity查找资源的路径private void changeVelocityResourceLoaderPath() {//设定查找资源的路径为类加载器的路径 即src下面String pathResources=VelocitySimple.class.getClassLoader().getResource("./").getPath();VelocityEngine velocityEngine=new VelocityEngine();Properties properties=new Properties();properties.setProperty(velocityEngine.FILE_RESOURCE_LOADER_PATH, pathResources);//使用默认配置和自己定义的配置文件初始化velocity引擎Velocity.init(properties);}//1.创建上下文 填充数据public VelocityContext createVelocityContext(){VelocityContext vcContext=new VelocityContext();//填充一个listData列表和className变量的数据vcContext.put("listData", getListData());vcContext.put("className", VelocitySimple.class.getName());return vcContext;}//2.根据外部摸板 创建模板对象public Template createTemplate(String pathTemplate){Template template=null;//此时的资源查找 即是在changeVelocityResourceLoaderPath()设置的路径下template=Velocity.getTemplate(pathTemplate, "utf-8");return template;}//3.创建输出流 即将模板合并后输出到哪个地方public BufferedWriter createBufferedWriter(){BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(System.out));return writer;}//获取封装数据private ArrayList getListData() {// TODO Auto-generated method stubArrayList<String> alArrayList=new ArrayList<String>();alArrayList.add("java语言");alArrayList.add("c语言");alArrayList.add("c++语言");alArrayList.add("c#语言");return alArrayList;}}
模板文件 velocity.vm
这是一个$className实例,显示简单的VelocityReferences begin with $ and are used to get something. Directives begin with # and are used to do something.Velocity engine resolve context object's data then replace in the template ,result output the write#set($this="Velocity")$this 很好用#foreach($name in $listData)$name#end#set($condition=true)#if($condition)条件为真#else条件为假#end
控制台输出结果
===============simpleVelocity1测试,使用输出流作为writer=====================这是一个com.undergrowth.velocity.VelocitySimple实例,显示简单的VelocityReferences begin with $ and are used to get something. Directives begin with # and are used to do something.Velocity engine resolve context object's data then replace in the template ,result output the writeVelocity 很好用java语言c语言c++语言c#语言条件为真===============simpleVelocity1测试,使用输出流作为writer====================================simpleVelocity2测试,使用字符串输出流作为writer=====================这是一个com.undergrowth.velocity.VelocitySimple实例,显示简单的VelocityReferences begin with $ and are used to get something. Directives begin with # and are used to do something.Velocity engine resolve context object's data then replace in the template ,result output the writeVelocity 很好用java语言c语言c++语言c#语言条件为真===============simpleVelocity2测试,使用字符串输出流作为writer====================================simpleVelocity3测试,使用字符串作为模板,字符串输出流作为writer=====================显示 com.undergrowth.velocity.VelocityTest 名称===============simpleVelocity3测试,使用字符串作为模板,字符串输出流作为writer=====================
可能出的问题
Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'velocity.vm'at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:317)at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:378)at com.undergrowth.velocity.VelocitySimple.createTemplate(VelocitySimple.java:44)at com.undergrowth.velocity.VelocityTest.simpleVelocity1(VelocityTest.java:58)at com.undergrowth.velocity.VelocityTest.main(VelocityTest.java:19)
即是找不到模板文件 解决办法
//如果不修改velocity的资源查找路径的话 即要将模板文件放在项目的目录下 即和src属于一个目录级别
或者使用上面的
//改变Velocity查找资源的路径private void changeVelocityResourceLoaderPath() {//设定查找资源的路径为类加载器的路径 即src下面String pathResources=VelocitySimple.class.getClassLoader().getResource("./").getPath();VelocityEngine velocityEngine=new VelocityEngine();Properties properties=new Properties();properties.setProperty(velocityEngine.FILE_RESOURCE_LOADER_PATH, pathResources);//使用默认配置和自己定义的配置文件初始化velocity引擎Velocity.init(properties);}
参考 http://blog.csdn.net/foart/article/details/5084010
0 0
- Velocity 1.7之简单实例
- velocity 简单实例
- velocity用法简单实例说明
- velocity用法简单实例说明 .
- Velocity之Hello World(入门实例)
- Velocity实例
- Velocity实例
- Velocity实例
- Velocity学习1之单实例多实例
- 采用字符串作为模板内容的 Velocity简单实例。
- velocity实例运行
- qpid之简单实例
- ionic之简单实例
- velocity简单例子
- velocity简单实现
- velocity 简单示例
- velocity简单例子
- velocity 简单搭建
- POX学习笔记:事件系统分析
- 大明宫发动机和个人的考虑发达国家
- 对话UNIX :正则表达式
- 数字逻辑图
- 利息计算 1994
- Velocity 1.7之简单实例
- Java中判断字符串是否相等
- 常见Key-Value存储系统的内存管理策略解析
- DBWn和LGWR
- opengl三维编程
- UDP连接
- android测试
- python 实现Hadoop的partitioner和二次排序
- XML基础杂烩