博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker自定义标签的写法和使用
阅读量:5230 次
发布时间:2019-06-14

本文共 2471 字,大约阅读时间需要 8 分钟。

首先是下载freemarker的jar包:

写标签类(需要继承TemplateDirectiveModel接口重写execute方法)

package freemarker;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.TemplateNumberModel;public class LabelDirective implements TemplateDirectiveModel {    @Override    public void execute(Environment env, Map params, TemplateModel[] loopVars,            TemplateDirectiveBody body) throws TemplateException, IOException {        Writer out = env.getOut();                //将模版里的数字参数转化成int类型的方法,,其它类型的转换请看freemarker文档        TemplateModel paramValue = (TemplateModel) params.get("num");        int num = ((TemplateNumberModel) paramValue).getAsNumber().intValue();                out.write("Akishimo num=" + params.get("num")+"的类型为:"+paramValue.getClass());        if (body != null) {            body.render(env.getOut());        }else{            throw new RuntimeException("标签内部至少要加一个空格");        }    }}

写配置和测试的类:

1 package freemarker; 2  3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.OutputStreamWriter; 7 import java.io.Writer; 8 import java.util.HashMap; 9 import java.util.Map;10 11 import freemarker.template.Configuration;12 import freemarker.template.DefaultObjectWrapper;13 import freemarker.template.Template;14 15 public class Test {16 17     public static void main(String[] args) throws Exception {18 19         Configuration cfg = new Configuration();20         //将写好的标签加入,起名叫label21         cfg.setSharedVariable("label", new LabelDirective());22         cfg.setDirectoryForTemplateLoading(new File("temp"));23         cfg.setObjectWrapper(new DefaultObjectWrapper());24 25         Template temp = cfg.getTemplate("list.ftl");26 27         Map root = new HashMap();28         root.put("user", "rzy");29 30         /* Writer out = new OutputStreamWriter(System.out); */31 32         File htmlFile = new File("E:/a.html");33         Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));34 35         temp.process(root, out);36         out.flush();37     }38 }

模版list.ftl先这么写

无标题文档

${user}自定义标签输出结果

<@label num=12>

运行后打开e盘里面生成的a.html结果为:

 

转载于:https://www.cnblogs.com/Akishimo/archive/2013/05/25/3099022.html

你可能感兴趣的文章
网卡bond技术
查看>>
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>