`

自己写的一个工具类: 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. **连接...

    Java poi导入导出EXCEL工具类(兼容各版本)

    概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...

    【强2】30个java工具类

    [工具类] 一个压缩工具类.java.txt [工具类] 用java编写简单UDP网络通信程序 .java.txt [工具类] 中文验证.jsp.txt [工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java ...

    java开发,30个常用工具类总结,全部来自项目实践中用到的工具类

    1. **DateUtils**: `java.util.Date` 和 `java.time` 包含日期和时间的操作,但DateUtils通常是Apache Commons Lang库中的一个工具类,提供更方便的日期处理方法,如格式化、解析、比较和日期的加减操作。...

    java 字符工具类

    自己写的java字符工具类。主要有以下几个函数: public static String escape(String str,String charset):可以将以下格式的字符串

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

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

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

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

    java实现sftp操作工具类

    版权声明:本工具类为个人兴趣基于chnSftp编写的应用,个人版权在先,后因各个办公环境无相关软件也有相关的个人使用,和办公环境内的推广使用,也欢迎互联网使用,如涉及相关环境认为本应用有不妥之处,请删除本人...

    CAD插件,开发的一个AutoCAD修改工具集合

    这是Ayunger开发的一个AutoCAD修改工具集合,现与各位共享,主要包括: 1、 绘制类: 箭头、示坡线、锥坡线、剖断线、垂线、切线、等高线加密、Hatch轮廓线等; 2、 标注类: 各类引线标注(圆形、坐标、断面、里程、...

    FastJson封装工具类(直接使用)

    这是一个封装好的FastJson工具类、里面已经处理各种情况~分享给大家

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

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

    Java实现的分页工具类

    本篇文章将详细探讨如何使用Java实现一个分页工具类,以及在实际应用中如何运用这个工具。 首先,分页的基本概念是通过指定每页显示的数据量(每页记录数,即pageSize)和当前页数(pageNumber),从数据库中获取...

    RSA的jar包,js和RSA的java工具类

    RSA是一种非对称加密算法,它是公钥密码学的一个重要代表。这个压缩包包含与RSA相关的JAR包、JavaScript文件以及Java工具类,主要用于在JSP应用中实现密码的加密和解密。以下是对这些资源及其在实际应用中的作用的...

    Winform可视化打印模板设计工具(含源码)

    同一个系统中,为了解决不同的客户可能需要设计不同的单据打印模板,实现此方法可能是: 1、设计不同的自带RDLC报表文件,根据当前客户加载不同的报表并打印 2、GDI+绘图 和 打印组件 ,不同的客户创建不同的绘图...

    Android常用的工具类utils可直接导入项目使用

    在Android开发过程中,工具类(Utils)是一种非常实用的代码模块,它包含了各种常见的功能方法,可以帮助开发者提高代码复用性和开发效率。本资源提供的"Android常用的工具类utils"是一组可以直接导入到Android项目...

    UDA复制狗写狗工具

    文件列表中的"UDA硬复制.exe"很可能是执行读写操作的主程序,它可能包含了一个用户界面,供用户选择设备、导入导出密钥等。而"readme.txt"文件通常包含有关如何使用该工具的重要信息,如系统要求、安装步骤、操作...

    increment.export.jar 导出增量包工具类

    increment.export.jar 导出增量包工具类 指定资源和导出的文件列表、保存的位置即可导出

    自己动手写编译器链接器高清完整版

    根据提供的文件信息,本文将围绕“自己动手写编译器...对于有兴趣进一步学习这方面知识的读者来说,《自己动手写编译器链接器》这本书无疑是一个宝贵的资源,它不仅提供了理论指导,还通过实际操作加深了读者的理解。

Global site tag (gtag.js) - Google Analytics