方法类:
package freemarker;
import java.lang.reflect.Method;
import java.util.List;
import com.model.Dep;
import freemarker.template.SimpleNumber;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;
public class MethodClass implements TemplateMethodModel {
public Object exec(List list) throws TemplateModelException {
/*for (Object obj : list) {
Dep dep=(Dep)obj;
System.out.println(dep.getDepId()+" "+dep.getDepName());
}*/
for (Object obj : list) {
System.out.println(obj);
}
return max(list);
}
//指定一个数在字符串中的位置
public Object indexOf(List list) throws TemplateModelException{
if(list.size()!=2){
throw new TemplateModelException("wanning argument");
}
return new SimpleNumber(((String)list.get(1)).indexOf((String)list.get(0)));
}
//比較兩個數 輸出大的
public Object max(List list) throws TemplateModelException{
if(list.size()!=2){
throw new TemplateModelException("wanning argument");
}
int first=Integer.parseInt(list.get(0).toString());
int last=Integer.parseInt(list.get(1).toString());
return first>last?first:last;
}
}
//测试类
package freemarker;
import java.io.File;import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.model.Dep;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.ObjectWrapper;
import freemarker.template.SimpleHash;
import freemarker.template.SimpleSequence;
import freemarker.template.Template;
public class Test {
private Configuration cfg;
public Configuration getCfg() {
return cfg;
}
//配置文件只初始化一次
public void init() throws Exception {
cfg = new Configuration();
//創建調整配置 加載指定模板目錄
cfg.setDirectoryForTemplateLoading(new File("src/"));
//Object_wrapper設置的默認值是ObjectWrapper.DEFALT_ARAPPER.
//如國想改變它,比如改換成ObjectWarpper.EEANS_WRAPPER,那麼可以這樣配置FreeMarker引擎(在其他線程開始之前)
//ObjectWrapper java類封裝Freemarker模型 (轉換)
//好像使用默認包裝器不能把自定義java類型轉成TempleModel模型類
//cfg.setObjectWrapper(ObjectWrapper.DEFAULT_WRAPPER);//這種現實不了dep
//cfg.setObjectWrapper(new DefaultObjectWrapper());//這種現實不了dep
cfg.setObjectWrapper(new BeansWrapper());
//cfg.setObjectWrapper(new DepWrapper());
}
public static void main(String[] args) throws Exception {
test();
}
//測試文件 Test1.ftl
public static void test() throws Exception{
Test obj = new Test();
obj.init();
//創建數據模型 用於在模板文件中顯示,名稱必須一致
Map root = new HashMap();
root.put("person", "1");
root.put("website", "2");
root.put("max", new MethodClass());
//獲取創建的模板
Template t = obj.getCfg().getTemplate("Test1.ftl");
t.setObjectWrapper(new DefaultObjectWrapper());
Writer out = new OutputStreamWriter(new FileOutputStream("Test1.html"),"GBK");//"Test1.html"),"GBK"
//根據模板文件輸出指定格式文件 參數:數據模型,輸出流
t.process(root, out);
System.out.println("Successfull................");
}
}
ftl文件:test1.ftl
Hello ${person}! Your Website is ${website}.
<html>
<head>
<title>Hello World</title>
</head>
<body>
<#assign x="something">
${max(1,2)}
${max(2,0)}
</body>
</html>