`

自己写的一个工具类: VelocityUtils

 
阅读更多
velocity1.7小例子 http://www.cnblogs.com/jston/archive/2013/02/19/2916999.html


<dependency>
            <groupId>velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.4</version>
        </dependency>


package com.util;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

import java.io.InputStream;
import java.io.Reader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

/**
 * 模板处理工具类,现在只支持类路径方式,不支持jar,绝对路径等方式。
 * 
 * @author pandy
 * 
 */
@SuppressWarnings("rawtypes")
public class VelocityUtils {

	private final static String DEFAULT_TEMPLATE_PATH = "";
	private final static String DEFAULT_LOG_TAG = "mystring";
	private static VelocityEngine engine;

	/**
	 * 做初始化信息
	 */
	static {
		Properties p = new Properties();
		// 设置输入输出编码类型。和这次说的解决的问题无关
		p.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
		p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
		
		p.setProperty("userdirective", "org.apache.velocity.tools.generic.directive.Ifnull");
		// 这里加载类路径里的模板而不是文件系统路径里的模板
		p.setProperty("resource.loader", "class");
		p.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");

		engine = new VelocityEngine();
		try {
			engine.init(p);
			 Velocity.init();
		} catch (Exception e) {
			e.printStackTrace();
			engine = null;
		}
	}

	/**
	 * 参数转换:Pap->VelocityContext
	 * 
	 * @param paramters
	 * @return
	 */
	private static VelocityContext parseMapToVelocityContext(Map paramters) {
		VelocityContext context = new VelocityContext();
		if (paramters != null && !paramters.isEmpty()) {
			Iterator it = paramters.keySet().iterator();
			while (it.hasNext()) {
				Object key = it.next();
				Object value = paramters.get(key);
				context.put(key.toString(), value);
			}
		}
		return context;
	}

	/**
	 * 读取模板文件
	 * 
	 * @param templateName
	 * @param path
	 * @return
	 */
	private static Template getTemplate(String templateName, String path) {
		Template template = null;
		try {
			template = engine.getTemplate(path + templateName);
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return template;
	}

	/**
	 * 
	 * @param templateName
	 * @return 模板的html字符串
	 */
	public static String merge(String templateName) {
		return merge(templateName, null, null, null);
	}

	/**
	 * 
	 * @param templateName
	 * @param path
	 * @return
	 */
	public static String merge(String templateName, String path) {
		return merge(templateName, path, null, null);
	}

	/**
	 * 这个方法要自动转换Map类型,变成VelocityContext类型
	 * 
	 * @param templateName
	 * @param paramters
	 * @return 模板的html字符串
	 */
	public static String merge(String templateName, Map paramters) {
		return merge(templateName, DEFAULT_TEMPLATE_PATH,
				parseMapToVelocityContext(paramters), null);
	}

	/**
	 * 
	 * @param templateName
	 * @param path
	 * @param paramters
	 * @return
	 */
	public static String merge(String templateName, String path, Map paramters) {
		return merge(templateName, path, parseMapToVelocityContext(paramters), null);
	}

	/**
	 * 
	 * @param templateName
	 * @param context
	 * @return 模板的html字符串
	 */
	public static String merge(String templateName, String path,
			VelocityContext context) {
		return merge(templateName, path, context, null);
	}

	/**
	 * 
	 * @param templateName
	 * @param context
	 * @return
	 */
	public static String merge(String templateName, VelocityContext context) {
		return merge(templateName, DEFAULT_TEMPLATE_PATH, context, null);
	}

	/**
	 * 
	 * @param templateName
	 * @param context
	 * @param writer
	 * @return 模板的html字符串
	 */
	public static String merge(String templateName, VelocityContext context,
			StringWriter writer) {
		return merge(templateName, DEFAULT_TEMPLATE_PATH, context, writer);
	}

	/**
	 * 最终执行方法
	 * 
	 * @param templateName
	 * @param path
	 * @param context
	 * @param writer
	 * @return 模板的html字符串
	 */
	public static String merge(String templateName, String path,
			VelocityContext context, StringWriter writer) {
		Template template = getTemplate(templateName, path);
		if (writer == null) {
			writer = new StringWriter();
		}

		try {
			template.merge(context, writer);
		} catch (Exception e) {
			e.printStackTrace();
            return null;
		}
		/* show the World */
		return writer.toString();
	}

	public static String mergeWithStr(Map paramters, String templateStr) {
		StringWriter writer = new StringWriter();
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				templateStr);
	}

	public static String mergeWithStr(Map paramters, StringWriter writer,
			String templateStr) {
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				templateStr);
	}

	public static String mergeWithStr(VelocityContext context,
			StringWriter writer, String templateStr) {
		try {
			Velocity.evaluate(context, writer, DEFAULT_LOG_TAG, templateStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return writer.toString();
	}

	public static String mergeWithStr(Map paramters, Reader reader) {
		StringWriter writer = new StringWriter();
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				reader);
	}

	public static String mergeWithStr(Map paramters, StringWriter writer,
			Reader reader) {
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				reader);
	}

	public static String mergeWithStr(VelocityContext context,
			StringWriter writer, Reader reader) {
		try {
			Velocity.evaluate(context, writer, DEFAULT_LOG_TAG, reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return writer.toString();
	}

	@Deprecated
	public static String mergeWithStr(Map paramters, InputStream instream) {
		StringWriter writer = new StringWriter();
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				instream);
	}

	@Deprecated
	public static String mergeWithStr(Map paramters, StringWriter writer,
			InputStream instream) {
		return mergeWithStr(parseMapToVelocityContext(paramters), writer,
				instream);
	}

	@Deprecated
	public static String mergeWithStr(VelocityContext context,
			StringWriter writer, InputStream instream) {
		try {
			Velocity.evaluate(context, writer, DEFAULT_LOG_TAG, instream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return writer.toString();
	}

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Map paramters = new HashMap();
		paramters.put("name", "Pandy");
		paramters.put("site", "http://zhuhaironghui.oicp.net");
		String str = merge("hello.vm", "com/rh/core/menu/templates/", paramters);
		System.out.println(str);
		
		System.out.println(mergeWithStr(paramters, "Hello $name!  Welcome to $site world!"));
	}

}



模板:com/templates/hello.vm
Hello $name!  Welcome to $site world!

调用
import com.util.VelocityUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by pandy on 14-8-13.
 */
public class ToolMain {

    public static void main(String[] args){
        Map<String, Object> context = new HashMap<String, Object>();
        context.put("name","Pandy");
        context.put("site","www.pandy8.com");
        String gridConfigStr = VelocityUtils.merge("com/templates/hello.vm", context);
        System.out.println(gridConfigStr);
    }
}



输出:
Hello Pandy!  Welcome to www.pandy8.com world!
分享到:
评论

相关推荐

    日期时间处理工具类

    这是一个比较全面的处理日期时间的工具类,利用该工具类可以得到你想要的日期时间。里面代码简洁,方法已经封装好,只需要调用即可。自己可以将其打成jar包来用

    Rabbitmq工具类,java工具类RabbitmqUtil

    `RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...

    jedisUtil工具类java

    jedis的工具类,java代码写的,非常全面,jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类...

    Android快速开发系列 10个常用工具类 程序源码

    在Android应用开发中,工具类(Utils)是程序员经常使用的辅助模块,它们包含了一系列静态方法,用于处理各种常见的任务,从而提高代码的复用性和可维护性。本资源"Android快速开发系列 10个常用工具类 程序源码...

    C#常用工具类代码集合Util第二版本(自己工作总结)

    C#常用工具类代码集合Util第二版本(自己工作总结),包括常用工具类,扩展方法工具类,百度地图C#工具类,Echart工具类,Office工具类,Autofac工具类,Web开发常用工具类,Winform开发常用工具类,是自己工作十年...

    精心整理的java常用的26个工具类

    精心整理的26个java常用工具类,如:FastJsonUtil,StringHelper,RandomHelper,FileHelper,HttpClientHelper等等,直接使用maven导入到eclipse中使用即可。

    RabbitMQ工具类及测试类(完整版)

    RabbitMQClientUtil是MQ的测试工具类,他封装了fanout、direct、topic三种exchange模式,并包括发送数据和接收数据。 Test1、Test2是测试类 使用maven管理,在pom.xml文件中引入如下代码: &lt;!-- Rabbitmq工具包...

    自己写的一个zip打包工具类

    NULL 博文链接:https://xsl2007.iteye.com/blog/737245

    java中ping命令ping工具类(循环ping)

    Ping是Windows下的一个命令 在Unix和Linux下也有这个命令。 ping也属于一个通信协议,是TCP/IP协议的一部分 利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:Ping空格IP...

    ActiveMQ连接池完整封装实例工具类

    本文将详细介绍如何实现一个ActiveMQ连接池的完整封装实例工具类,并探讨其背后的设计思想。 首先,我们需要了解JMS(Java Message Service)接口,它是Java平台中用于创建、发送、接收和读取消息的标准API。...

    Xml和Json互转工具类

    本实例主要是通过json-libjar包中的工具类进行操作,简单实现了xml字符串和json字符串之间的转化,xml文件和json文件的转化。而且还兼容jsonObject和jsonArray两种格式,自己摸索,记录一下以便学习。

    json工具类

    自己写的一个json工具类。

    基于VFP基类Grid开发的用于程序开发的工具类

    zclGrid类是基于VFP基类Grid开发的用于程序开发的工具类。 其基本功能: 1、当前Grid显示内容的备份,备份类型为DBF或xls, 使用方法,可参照示例表单的“文件备份”按钮控件代码 2、多层表头的实现 使用方法,...

    百度地图离线工具类集合.rar

    为了使用这个工具类集合,你需要先解压文件"百度地图离线工具类集合",然后参考博主的系列文章学习如何集成和使用这些工具。博主可能还会提供个人微信支持,以便进行技术指导和交流。通过深入理解和实践,你可以创建...

    bos万能工具类

    这是bos开发使用的工具类,大概一千多行代码,包括获取当前组织,用户,自定义编码规则等等等等实用的方法,这是一朋友给我的,我在做金蝶开发的时候,帮了我很多很多!感兴趣的可以下来看看,每个方法都有注释

    android打开应用权限设置页(国内各大手机厂商适配终极工具类)

    该工具类可以调出各大手机厂商的权限设置页 测试结果: 华为:OK 小米:OK 锤子:OK 一加:OK vivo:OK,vivo有自己的提示,再次点击后也是会跳出提示,有瑕疵,但是还可以 oppo:OK,自己会提示 魅族:暂时跳转没...

    管家婆5个版本写狗数据工具

    "管家婆5个版本写狗数据工具"是一个专门针对管家婆系列软件的数据处理工具,主要用于在不同的管家婆软件版本间进行数据迁移、备份或恢复。这个工具覆盖了管家婆的几个重要版本,包括“服装版”、“辉煌II代+”、...

    java、android、web三端通用的RSA和AES工具类、js

    本文将详细介绍Java、Android和Web三端通用的RSA和AES工具类的使用,以及相关的JavaScript实现。RSA是一种非对称加密算法,而AES则是一种对称加密算法,它们在保护敏感信息方面发挥着关键作用。 首先,RSA(Rivest-...

    highcharts 导出图片 例子 .net C# Demo 工具类

    在.NET C#环境中,实现HighCharts图表的导出功能,可以通过创建一个服务类和相关的控制器来完成。下面将详细解释这个过程。 首先,`ExportHighChart.cs`是关键的工具类,它包含了将HighCharts图表转换为图片的核心...

    Gson+JsonPath+泛型的Json工具类

    Json解析工具类完善一下,使用GSON+JsonPath+泛型来提高自己写JSON解析的效率 http://blog.csdn.net/b275518834/article/details/49819831

Global site tag (gtag.js) - Google Analytics