freemarker 自定义标签
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 自定义标签的更多相关文章
- freemarker自定义标签报错(六)
freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Encountered "\"\u4f60\u597d\uff01\& ...
- freemarker自定义标签报错(五)
freemarker自定义标签 1.错误描述 六月 05, 2014 11:40:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严 ...
- freemarker自定义标签报错(四)
freemarker自定义标签 1.错误描述 六月 05, 2014 11:31:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严 ...
- freemarker自定义标签(一)
freemarker自定义标签 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-eq ...
- freemarker自定义标签报错(三)
freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Encountered " " at line 14, column ...
- freemarker自定义标签报错(二)
freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Unexpected end of file reached. at freemarker ...
- freemarker自定义标签报错(一)
freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgr ...
- freemarker自定义标签报错(七)
1.错误描述 六月 09, 2014 11:11:09 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...
- freemarker自定义标签(三)-nested指令
freemarker自定义标签 1.nested指令 是可选的,可以在<#macro>和</#macro>之间使用在任何位置和任意次数 2.示例说明 <#macro ta ...
- freemarker自定义标签(二)
freemarker自定义标签 1.自定义标签 通过自定义标签,写一个重复指定字符串 2.实现源码 <html> <head> <meta http-equiv=&quo ...
随机推荐
- 什么是超级立方体,HyperCube
我试试用我的方式说说如何构造n维空间吧. n维空间在n大于3后,说要画出来,有点难以想象.但从数学的角度看,高维空间这个概念还算比较普通.容易理解的. 与其解释,不如快快开始.我选择用图(Graph) ...
- 基于C#语言利用Microsoft.office.introp.excel操作Excel总结
终于解决了质量评估测试软件在任意装有excel(2010以下版本)的电脑上正常使用的问题!!!!!!!!!! 可到http://www.microsoft.com/en-sa/download/con ...
- 【HTML5】拖放(Drag 和 drop)
效果图: <!DOCTYPE HTML> <html> <head> <style type="text/css"> #div1 { ...
- 登录Cloudera Manager时报错org.hibernate.exception.GenericJDBCException: Could not open connection
去Cloudera Server上边看了一下日志: cat /opt/cloudera-manager/log/cloudera-scm-server/cloudera-scm-server.log ...
- vi总结
vi常用命令整理 ★命令模式 移动光标 h 或 向左方向键(←) → 光标向左移动一个字元 j 或 向下方向鍵(↓) → 光标向下移动一个字元 k 或 向上方向鍵(↑) → 光标向上移动一个字元 l ...
- 其他主流开源硬件简介BeagleBone Black快速入门
其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...
- 最短路(Bellman_Ford) POJ 1860 Currency Exchange
题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...
- ZOJ2539 Energy Minimization(最小割)
题目大概说,给一个n个格子的矩阵,每个格子都有一个数字pi.求这个函数的最小值: 其中xi的取值是0或1,v0.v1已知,j是和i在矩阵中上下左右相邻的位置且j>i. 这个式子有三个加数组成A+ ...
- POJ 1947 (树形DP+背包)
题目链接: http://poj.org/problem?id=1947 题目大意:树中各点都由一条边连接.问要弄出个含有m个点的(子)树,至少需要截去多少条边. 解题思路: 设dp[i][j]为i总 ...
- [插头DP自我总结]
[HNOI 2007]神奇游乐园 #include <bits/stdc++.h> #define maxn 110 using namespace std; typedef long l ...