这不是废话吗?本来Freemarker就是一模板引擎,有啥不可以的。不过有闲的蛋疼的嫌疑。
拿个简单运用吧。假如有张表,id号是从1到100,做个循环把名字输出来。
1. 废话不多说,先写模板文件
select * from ktsys.sys_report_file where fi_id=${key}
2. 还能说啥,写java文件处理呗。
思路很简单嘛,先解析数据源,取得连接,然后找这个sql.ftl文件呗。我放在了src下面,所以不管三七二十一,用代码找到它,然后写数据模型,并输出。此时sql.ftl文件的值得到填充,那好呗,我拿这条sql语句用JDBC的方式处理就ok了。
代码说话:
package com.victorysoft.trigger;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URL;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import victorysoft.DAO.Result;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class ActionServletFM {
private Configuration freemarker_cfg = null;
public Configuration getFreeMarkerCFG() throws IOException {
if (null == freemarker_cfg) {
freemarker_cfg = new Configuration();
URL u = CreateTriggerTemplate.class.getResource("/");
freemarker_cfg
.setDirectoryForTemplateLoading(new File(u.getPath()));
freemarker_cfg.setEncoding(Locale.CHINA, "UTF-8");
}
return freemarker_cfg;
}
public String geneHtmlFile(Template t, Map<String, String> root) {
try {
StringWriter writer = new StringWriter();
t.process(root, writer);
return writer.getBuffer().toString();
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
new ClassPathXmlApplicationContext("proxoolData.xml");
ActionServletFM test = new ActionServletFM();
Result result2 = new Result("YTH");
try {
Template t = test.getFreeMarkerCFG().getTemplate("sql.ftl");
Map<String, String> root=new HashMap<String, String>();
for (int i = 1; i < 5; i++) {
root.put("key", ""+i);
String str=test.geneHtmlFile(t,root);
result2.executeQuery(str.replaceAll("\r\n", ""));
System.out.println(result2.getFieldValue(0, 2)+":::"+str.replaceAll("\r\n", ""));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL u = CreateTriggerTemplate.class.getResource("/");这个了,取得class当前目录,由于我把ftl文件就放src下了,所以就在这下面找就ok啦。其它废物代码不扯了。很easy!
我真怀疑有点蛋疼,但是了,这里想说明的是,freemarker是很强大的。反正是模板文件,不受任何其它文件语法影响。符合自己的语法规则就行,可以用于html、jsp、sql.多的是,可以做模板定制嘛!!!!!!