【转载来源: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. 素数分布 - nefu 117

    素数个数的位数 - nefu 117 普及一个公式: 位数公式:要求一个数x的位数,用公式:lg(x)+1 素数分布:n/ln(n) 所以直接求解n/ln(n)的位数就可以了 代码如下: #inclu ...

  2. mysql悲观锁以及乐观锁总结和实践

    悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中, 将数据处于锁定状态.悲观锁的实现,往往 ...

  3. 配置spring boot 内置tomcat的accessLog日志

    #配置内置tomcat的访问日志server.tomcat.accesslog.buffered=trueserver.tomcat.accesslog.directory=/home/hygw/lo ...

  4. @configurationProperties的写法

  5. SVM(三)线性支持向量机

    本文是在微信公众号发表的原创~ 额,图片粘不过来~就把链接给你们吧 http://mp.weixin.qq.com/s?__biz=MjM5MzM5NDAzMg==&mid=400740076 ...

  6. $.extendGit 丢弃所有本地修改的方法

    git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash pop回复. git rese ...

  7. Memcached get 命令

    Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空. 语法: get 命令的基本语法格式如下: get key 多个 key 使用空 ...

  8. getline

    istream& istream::getline(char*, streamsize,char= '\n'); 函数getline与get的区别在于,函数get当遇到分隔符后,停止获取,并将 ...

  9. 关系型数据库(RDBMS)与 MongoDB 的对应关系

    谈一下关系型数据库(RDBMS)与 MongoDB 的对应关系:

  10. ctci1.2

    ;     ; i < len/; i++){         tmp = *(str+i);         *(str+i) = *(str+len--i);         *(str+l ...