关于FreeMarker自定义TemplateDirectiveModel

ava代码如下: 

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



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

Java代码  收藏代码
  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()> 

推荐用第一种

posted @ 2016-08-19 11:32  涤新云  阅读(1772)  评论(0编辑  收藏  举报