【java工具类】对velocity的封装

来源:互联网 发布:js timer控件 编辑:程序博客网 时间:2024/04/29 08:58

下面是对velocity的封装,参考了这篇文章:

http://kodak-zhou.iteye.com/blog/970682


【VelocityHelper】

package Easis.ViewEngine;import java.io.BufferedWriter;import java.io.OutputStreamWriter;import java.io.StringWriter;import java.util.ArrayList;import java.util.Properties;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;public class VelocityHelper {private String _tplRoot="";private VelocityContext _context=new VelocityContext();    public VelocityContext getVelocityContext(){        return _context;    }    public void clear(){        _context=new VelocityContext();    } public VelocityHelper(String tplRootPath){     _initialization("utf-8", "utf-8", tplRootPath); }    public VelocityHelper(String input_encoding,String output_encoding,String tplRootPath){        _initialization(input_encoding, output_encoding, tplRootPath);    }    public boolean put(String key,Object value){        if(_context.containsKey(key)==true){            _context.remove(key);            _context.put(key,value);        }        else{            _context.put(key,value);        }        return true;    }    public boolean remove(String key){        if(_context.containsKey(key)==false){            return false;        }        _context.remove(key);        return true;    }private void _initialization(String input_encoding,String output_encoding,String tplRootPath){        /* first, we init the runtime engine.  Defaults are fine. */    this._tplRoot=tplRootPath==null?"":tplRootPath;    Properties p = new Properties();    //设置输入输出编码类型。和这次说的解决的问题无关    p.setProperty(Velocity.INPUT_ENCODING, input_encoding);    p.setProperty(Velocity.OUTPUT_ENCODING, output_encoding);    //这里加载类路径里的模板而不是文件系统路径里的模板    p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");    //也可以用下面方法指定一个绝对路径,不过这样要求你所有的模板都放在该路径下,是有局限的    //p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "模板路径");    try    {        Velocity.init(p);    }    catch(Exception e)    {        System.out.println("Problem initializing Velocity : " + e );        e.printStackTrace();        return;    }}    public String parseTempalte(String tplName,String encoding){        try{            String tplroot_and_tplName="";            if(_tplRoot.trim().length()>0){               tplroot_and_tplName=_tplRoot.trim()+"/"+tplName.trim();            }            else{            tplroot_and_tplName=tplName.trim();    }            tplroot_and_tplName=tplroot_and_tplName.replaceAll("/+","/");            StringWriter sw=new StringWriter();            Velocity.mergeTemplate(tplroot_and_tplName,encoding,_context,sw);            String res=sw.toString();            sw.close();            return res;        }        catch (Exception e){            return e.toString();        }    }    public String evaluate(String velocityTplStrContent){        try{            StringWriter sw=new StringWriter();            Velocity.evaluate(_context,sw,"Use the velocity as str replacer.",velocityTplStrContent);            String res=sw.toString();            sw.close();            return res;        }        catch (Exception e){            return e.toString();        }    }}

【如何使用?】

模板文件放在src下面的tpl,名称为:test.vm,里面就一句话。

okkkkkk



package TestCase;import Easis.ViewEngine.VelocityHelper;public class testVelocityHelper {    public static void main(String[] args){        VelocityHelper  _ve=new VelocityHelper("/tpl");        String str1= _ve.parseTempalte("test.vm","utf-8");        System.out.println(str1);    }}



算起来,freemarker我封装了,velocity我封装了,javascript的encodeURI encodeURIComponent我参考其他人实现了,数据库连接池直接用网上,properties文件读写也封装了,html的解码编码形式:8xxx̕也完成,仿照asp.net的datatable,datacolumn,datarow也完成,对http协议的字符解析与参数,文件上传解析也完成,

最近做的工具也算很多了。

下一篇将描述如何编写自己的代码生成器,附带源代码及生成器采用的模板一份。



原创粉丝点击