Freemarker自定义方法

方法类:

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值