1.编写标签类

package com.pccw.business.fnd.common.filegen;

import java.io.IOException;
import java.io.Writer;
import java.util.Map; import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException; public class FinalReport2Directive implements TemplateDirectiveModel { /**
* @param env
* 上下文变量
* @param params
* 标签参数
* @param loopVars
* @param body
* 标签体
*/
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws TemplateException, IOException {
TemplateModel prjojectNumTM = (TemplateModel)params.get("projectNum");
System.out.println(prjojectNumTM.toString()); body.render(new FinalReportCustomWriter(env.getOut())); } private static class FinalReportCustomWriter extends Writer { private final Writer out; FinalReportCustomWriter(Writer out) {
this.out = out;
} public void write(char[] cbuf, int off, int len) throws IOException { StringBuffer buf = new StringBuffer();
buf.append("<tr><td>11</td></tr>");
for (int i = 0; i < 50; i++) {
buf = new StringBuffer();
buf.append("<tr><td>" + i + "orderName" + "</td></tr>");
buf.append("<tr><td>" + i + "orderNum" + "</td></tr>");
buf.append("<tr><td>" + i + "orderQuantity" + "</td></tr>");
buf.append("<tr><td>" + i + "orderPrice" + "</td></tr>");
out.write(buf.toString());
}
} public void flush() throws IOException {
out.flush();
} public void close() throws IOException {
out.close();
}
}
}

2.  编写文件生成类,单例

package com.pccw.business.fnd.common.filegen;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import javax.servlet.ServletContext; import freemarker.template.Configuration;
import freemarker.template.Template; public class HtmlFileBuild { private static HtmlFileBuild htmlFileBuild = null;
private Configuration configuration; private HtmlFileBuild(){
configuration = new Configuration();
} public static HtmlFileBuild getInsance(){
if(htmlFileBuild == null){
htmlFileBuild = new HtmlFileBuild();
}
return htmlFileBuild;
} /**
*
* @param context
* 上下文
* @param data
* 绑定数据
* @param templateFileName
* 模板名称
* @param targetHtmlFileName
* 生成目标文件名称
* @return 生成html文件路径
* @throws Exception
*/
public String crateHTML(ServletContext context, Map<String, Object> data, String templateFileName,
String targetHtmlFileName) throws Exception { try {
// 模板存放路径
this.configuration.setDirectoryForTemplateLoading(new File(
"D:/projects/FAS/trunk/dev/arch/WebRoot/business/template")); // 模板文件名称
Template template = this.configuration.getTemplate(templateFileName);
template.setEncoding("UTF-8");
// 静态页面要存放的路径
String htmlPath = targetHtmlFileName;
File htmlFile = new File(htmlPath);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
// 处理模版 map数据 ,输出流
data.put("projectNum", "B00002");
template.process(data, out);
out.flush();
out.close();
return targetHtmlFileName;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
} // test
public static void main(String arg[]) throws Exception {
new HtmlFileBuild().crateHTML(null, new HashMap(), "finalReport2.ftl", "E:/tmp/freemarker/finalReport2.html");
}
}

3. finalReport2.ftl

<#assign fr2 = "com.pccw.business.fnd.common.filegen.FinalReport2Directive"?new()>
<table style="border:1px">
<@fr2 projectNum="${projectNum}"> </@fr2>
</table>

freemarker 自定义标签的更多相关文章

  1. freemarker自定义标签报错(六)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Encountered "\"\u4f60\u597d\uff01\& ...

  2. freemarker自定义标签报错(五)

    freemarker自定义标签 1.错误描述 六月 05, 2014 11:40:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严 ...

  3. freemarker自定义标签报错(四)

    freemarker自定义标签 1.错误描述 六月 05, 2014 11:31:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严 ...

  4. freemarker自定义标签(一)

    freemarker自定义标签 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-eq ...

  5. freemarker自定义标签报错(三)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Encountered " " at line 14, column ...

  6. freemarker自定义标签报错(二)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Unexpected end of file reached. at freemarker ...

  7. freemarker自定义标签报错(一)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgr ...

  8. freemarker自定义标签报错(七)

    1.错误描述 六月 09, 2014 11:11:09 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  9. freemarker自定义标签(三)-nested指令

    freemarker自定义标签 1.nested指令 是可选的,可以在<#macro>和</#macro>之间使用在任何位置和任意次数 2.示例说明 <#macro ta ...

  10. freemarker自定义标签(二)

    freemarker自定义标签 1.自定义标签 通过自定义标签,写一个重复指定字符串 2.实现源码 <html> <head> <meta http-equiv=&quo ...

随机推荐

  1. HDU 4974 Dracula and Ethan 优先队列

    Dracula and Ethan Time Limit: 1 Sec  Memory Limit: 256 MB Description Dragon is watching competition ...

  2. loj 1021(状压dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25887 题目大意:给定的一个某进制下的排列,问它的全排列有多少个能 ...

  3. struts乱码问题

    我觉得很有必要记录一下,在我搜便了网上乱码问题的解决方案无果之后几乎绝望. 一定要在提交的form 加上 methd =  post

  4. jquery概要--基础01

    jquery对象,DOM对象 var $cr = $('#cr');          var cr = $cr[0]; /var cr = $cr.get(0); var cr = document ...

  5. js:数据结构笔记12--排序算法(2)

    高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...

  6. OUYA游戏开发核心技术剖析大学霸内部资料

    OUYA游戏开发核心技术剖析大学霸内部资料 试读地址:http://pan.baidu.com/s/1ntuql8t 介绍:本教程是一本进阶级的教材,它可以让读者在了解.熟悉了OUYA设备的基础上,开 ...

  7. 水题 ZOJ 3876 May Day Holiday

    题目传送门 /* 水题:已知1928年1月1日是星期日,若是闰年加1,总天数对7取余判断就好了: */ #include <cstdio> #include <iostream> ...

  8. OI再见

    以下是一只蒟蒻的回忆: 1.进入高一 小县城不重视OI,直到进了高中才知道有OI这个东西,于是我就开始了OI…(看,够弱的吧,相信你是小学就开始学了) 学了几天Pascal语法后,被老师报上了NOIP ...

  9. 发送JS错误日志到服务器

    JS记录错误日志/捕捉错误 //onerror提供异常信息,文件路径和发生错误代码的行数的三个参数. window.onerror = function(e,url,index){ var msg = ...

  10. This function has none of DETERMINISTIC, NO SQL 解决办法

    在恢复mysql数据库时提示 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its decl ...