【转载来源:http://zwllxs.iteye.com/blog/2036826】

java代码如下:

  1. import freemarker.core.Environment;
  2. import freemarker.template.ObjectWrapper;
  3. import freemarker.template.TemplateDirectiveModel;
  4. /**
  5. * FreeMarker自定义宏
  6. * 获取App下载排行列表
  7. * 参数包括 length(列表长度) mtypeCode(主类型代码) typeCode(小类型代码) rankMode(排行模式1、2、3)
  8. * @author shannon
  9. *
  10. */
  11. public class FMAppRankDirective implements TemplateDirectiveModel {
  12. @Resource(name = "appRankService")
  13. private AppRankService appRankService;
  14. @SuppressWarnings("unchecked")
  15. @Override
  16. public void execute(Environment env, Map params, TemplateModel[] loopVars,
  17. TemplateDirectiveBody body) throws TemplateException, IOException {
  18. //DirectiveUtils是借用jeecms项目中的工具类,主要是因为它集成了一些异常处理功能,
  19. //其实完全可以不用它,params是个Map,自己通过key取值就可以了,做一下空值判断
  20. Integer length = DirectiveUtils.getInt("length", params);
  21. Integer mtypeCode = DirectiveUtils.getInt("mtypeCode", params);
  22. Integer typeCode = DirectiveUtils.getInt("typeCode", params);
  23. Integer rankMode = DirectiveUtils.getInt("rankMode", params);
  24. ArrayList<App> rankList = appRankService.getRankList(length, mtypeCode, typeCode, rankMode);
  25. env.setVariable("appRankList", ObjectWrapper.DEFAULT_WRAPPER.wrap(rankList));
  26. if (body != null) {
  27. body.render(env.getOut());
  28. }
  29. }
  30. }

页面引用有多种方法: 
一:

  1. <bean id="fp" class="xxxx.tag.FMAppRankDirective"></bean>
  2. <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  3. 此处省略
  4. <property name="freemarkerVariables">
  5. <map>
  6. <entry key="fp" value-ref="fp"/>
  7. </map>
  8. </property>
  9. </bean>

然后页面直接用 <@fp 的方式调用,

二:在页面上直接导入,如: 
<#assign fp= "xxxx.tag.FMAppRankDirective"?new()>

推荐用第一种

关于FreeMarker自定义TemplateDirectiveModel的更多相关文章

  1. FreeMarker自定义TemplateDirectiveModel

    [参考:http://blog.csdn.net/fangzhangsc2006/article/details/8687371] 在采用FreeMarker做前台视图模板的情况下,我们可以通过< ...

  2. FreeMarker 自定义 TemplateDirectiveModel(二)

    FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker 与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不 ...

  3. FreeMarker 自定义 TemplateDirectiveModel(一)

    FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker 与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不 ...

  4. 基于SSM3框架FreeMarker自定义指令(标签)实现

    通过之前的Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解系列文章,我们已经成功的整合到了一起,这次大象将在此基础上对框架中的FreeMarker模板 ...

  5. freemarker自定义标签(与java合用)

    自定义类继承FreemarkerManager类,重写protected Configuration createConfiguration(ServletContext servletContext ...

  6. OneBlog开源博客-详细介绍如何实现freemarker自定义标签

    前言 OneBlog中使用到了springboot + freemarker的技术,同时项目里多个controller中都需要查询一个公有的数据集合,一般做法是直接在每个controller的方法中通 ...

  7. freemarker 自定义标签

    1.编写标签类 package com.pccw.business.fnd.common.filegen; import java.io.IOException; import java.io.Wri ...

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

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

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

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

随机推荐

  1. Python实现单链表

    定义链表结构: class ListNode: def __init__(self, x): self.val = x self.next = None 输出该链表l1的元素: while l1: p ...

  2. 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践

    Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...

  3. 如何使移动web页面禁止横屏?

    https://segmentfault.com/q/1010000005813183 一般只有移动版有这种需求,我们一般不去禁止,而是比例缩放,css实现,竖屏1rem = 9pt ,横屏1rem ...

  4. Mysql之explain调优

    Explain调优 使用explain语法,对SQL进行解释,根据其结果进行调优: MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该 ...

  5. jmeter-03 JMeter + Jenkins 集成

    一.准备JMeter 测试计划 mock_api.jmx 接口准备:http://10.1.102.75:8000/mock/api/jmeter 二.jenkins 插件准备  Performanc ...

  6. UVA-10972 RevolC FaeLoN (边双连通+缩点)

    题目大意:将n个点,m条边的无向图变成强连通图,最少需要加几条有向边. 题目分析:所谓强连通,就是无向图中任意两点可互达.找出所有的边连通分量,每一个边连通分量都是强连通的,那么缩点得到bcc图,只需 ...

  7. 神经网络总结(bp)

    一.从生物到计算机 神经细胞利用电-化学过程交换信号.输入信号来自另一些神经细胞.这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触(synapse),信号就从树突上的突触进入本细胞. ...

  8. python简单日志统计

    业务场景:在一个目录里,有许多日志文件,里面是一条条的json数据,格式如下,为防止一个账号被多个ip使用,现在我想知道:哪些用户登录了哪些ip,和哪些ip登录了哪些用户,如果一个ip对应一个用户,就 ...

  9. SCRF的简介及防护手段

    CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购 ...

  10. wxWidgets的配置

    参考 :http://www.codeproject.com/Articles/11515/Introduction-to-wxWidgets 我是将D:\wxWidgets-3.0.1,中 编译过  ...