在老大的指示下,我将Velocity的模板生成自己做了一个工具类,方便后面再次使用
1.思考:需要哪些参数?需要哪些返回值?
1>按照以往的经验来讲使用Velocity模板引擎只需要两个参数
1)html页面(任何形式都可以)
2)页面参数(最好是map类型)
2>生成的页面返回值
返回String类型
2.实现问题:作为参数的html页面,我们需要用什么形式获取?
1>String形式
2>template形式,或者html地址传进来
第一种比较灵活,不管html源头是vm页面还是字符串都可以处理,第二种灵活性降低了,并且对
velocity本身的依赖性变强了,主要还是因为第二种的我没有尝试成功,只能选择第一种了。
3.实现代码
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
/**
* Velocity模板生成html页面工具类
*/
public class VelocityTransformHelper {
/**
* 将html模板,放入参数
* @param template
* @param param
* @return
*/
public String getHtmlString(String template, Map<String,Object> param){
VelocityEngine velocityEngine = new VelocityEngine();
Properties props = new Properties();
props.put("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
props.put("runtime.log.logsystem.log4j.category", "velocity");
props.put("runtime.log.logsystem.log4j.logger", "velocity");
velocityEngine.init(props);
VelocityContext vcl=new VelocityContext();
Iterator iter = param.entrySet().iterator();
while (iter.hasNext()){
Map.Entry entry = (Map.Entry) iter.next();
String key = (String)entry.getKey();
Object val = entry.getValue();
vcl.put(key,val);
}
StringWriter sw = new StringWriter();
velocityEngine.evaluate(vcl, sw,"",template);
return sw.toString();
}
}
至于如何获得vm文件中的内容,我采用了java的jar包去实现,PathMatchingResourcePatternResolver在转换成String流,也算是曲线救国了,大家如果知道如何获取vm页面的template的方法,请告知在下~