1,遇到问题
之前使用 freeMarker 开发 cms系统,生成html。
后来页面不用jsp,开发了,换成velocity展示了。
想着生成页面也使用velocity。
但是发现读取文件的类库加载不进来。
2,解决
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import java.io.StringWriter;
import java.util.Date;
public class CreateHtml {
public static void main(String[] args) {
Velocity.init();
/* lets make a Context and put data into it */
VelocityContext context = new VelocityContext();
context.put("name", "Velocity");
context.put("project", "Jakarta");
context.put("now", new Date());
/* lets make our own string to render */
String str = "We are using $project $name to render this. $now";
StringWriter stringWriter = new StringWriter();
Velocity.evaluate(context, stringWriter, "mystring", str);
System.out.println(" string : " + stringWriter);
}
}
读取文件从一个字符串读取模板,生成文件写到一个字符串里面。
读取文件的也不麻烦
Velocity.mergeTemplate(“testtemplate.vm”, context, w );
3,类库加入
因为日期是Date,需要对时间进行格式化。
在web里面可以使用toolbox引入,但是在main函数里面不知道咋加载进去。
找了半天,其实非常简单,直接new一个对象就行。
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import java.io.StringWriter;
import java.util.Date;
public class CreateHtml2 {
public static void main(String[] args) {
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();
Velocity.init();
/* lets make a Context and put data into it */
VelocityContext context = new VelocityContext();
context.put("name", "Velocity");
context.put("project", "Jakarta");
context.put("now", new Date());
context.put("dateFormatUtils", new org.apache.commons.lang.time.DateFormatUtils());
/* lets make our own string to render */
String str = "We are using $project $name to render this. 中文测试 $!dateFormatUtils.format($!now,'yyyy-MM-dd')";
StringWriter stringWriter = new StringWriter();
Velocity.evaluate(context, stringWriter, "mystring", str);
System.out.println(" string : " + stringWriter);
}
}
就一行:
context.put(“dateFormatUtils”, new org.apache.commons.lang.time.DateFormatUtils());
直接把新对象放入进去就可以使用格式化函数了。
$!dateFormatUtils.format($!now,'yyyy-MM-dd')