freemarker 自定义指令

问题描述

freemarker 自定义指令,需要实现TemplateDirectiveModel 类中的 public void execute(Environment env, Map params, TemplateModel[] loopVars,TemplateDirectiveBody body) throws TemplateException, IOException 方法,改方法中的TemplateModel[] loopVars 怎么用呢?网上搜了半天也没看明白,请问这个参数怎么用,最好给个例子

解决方案

给你一个例子public class OperatorDirective implements TemplateDirectiveModel{@Overridepublic void execute(Environment env, Map params, TemplateModel[] arg2,TemplateDirectiveBody body) throws TemplateException, IOException {String code = null;String roleId = null; if(params.get("code") != null){SimpleScalar codeSimpleScalar = (SimpleScalar)params.get("code");code = codeSimpleScalar.getAsString();}if(params.get("roleId") != null){SimpleScalar roleIdSimpleScalar = (SimpleScalar)params.get("roleId");roleId = roleIdSimpleScalar.getAsString();}if(code == null)throw new TemplateException("code不能为空!",env);if(roleId == null)throw new TemplateException("roleId不能为空!",env);ModuleRoleService moduleRoleService = SpringContextUtil.getApplicationContextInstance().getBean("moduleRoleService", ModuleRoleService.class);if(moduleRoleService != null){boolean isPrevilege = moduleRoleService.findPrevilegeByCodeAndRoleId(code, new Long(roleId));if(isPrevilege){System.out.println("env.getOut()=="+env.getOut());body.render(env.getOut());}}}}然后最好放到全局变量里去,这样的好处是是在模板里直接使用,要不然每次都需要导入,例如spring里可以这样配置<bean id="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath"><value>/</value></property><!-- 全局变量部分 --><property name="freemarkerVariables"><entry key="previlegeModuleEnum" value-ref="previlegeModuleEnum" /></map></property></bean><bean id="operatorDirective " class="com.uns.mall.ma.directive.OperatorDirective " />最后在模板里使用<@ operatorDirective roleId="data" code ="data"/>
解决方案二:

解决方案三:
* @param loopVars an array that corresponds to the "loop variables", in * the order as they appear in the directive call. ("Loop variables" are out-parameters * that are available to the nested body of the directive; see in the Manual.) * You set the loop variables by writing this array. The length of the array gives the * number of loop-variables that the caller has specified.如<#list 0..x as i> 大体意思就是loopVars存放的是循环变量 对嵌套body内是有效的 也就是说可以修改这个数组改变循环变量 再比如<#list 0..x as i> <#list 0..x as j> 那么这个数组的长度就是2
解决方案四:
哥们看这个:http://blog.csdn.net/laufu/article/details/6748617

时间: 2024-09-25 14:19:10

freemarker 自定义指令的相关文章

AngularJS中的自定义指令的使用介绍

  这篇文章主要介绍了深入讲解AngularJS中的自定义指令的使用,AngularJS是一款热门的JavaScript开发库,需要的朋友可以参考下 AngularJS的自定义指令,就是你自己的指令,加上编译器编译DOM时运行的原生核心函数.这可能很难理解.现在,假设我们想在应用中不同页面复用一些特定的代码,而又不复制代码.那么,我们就可以简单地把这段代码放到单独的文件,并调用使用自定义指令的代码,而不是一遍又一遍地敲下来.这样的代码更容易理解.AngularJS中有四种类型的自定义指令: 元素

详解AngularJS中自定义指令的使用

  这篇文章主要介绍了详解AngularJS中自定义指令的使用,包括结合自定义HTML标签的使用,需要的朋友可以参考下 自定义指令中使用AngularJS扩展HTML的功能.自定义指令使用的"指令"的功能定义.自定义指令只是替换了它被激活的元素.引导过程中AngularJS应用程序找到了匹配的元素,并做好使用自定义指令compile()方法一次活动再处理使用基于指令的范围自定义指令link()方法的元素. AngularJS提供支持,以下列元素的类型来创建自定义指令. Element

AngularJS创建自定义指令的方法详解_AngularJS

本文实例讲述了AngularJS创建自定义指令的方法.分享给大家供大家参考,具体如下: 这是一篇译文,来自angular开发者说明的指令.主要面向已经熟悉angular开发基础的开发者.这篇文档解释了什么情况下需要创建自己的指令,和如何去创建指令. 什么是指令 从一个高的层面来讲,指令是angular $compile服务的说明,当特定的标签(属性,元素名,或者注释) 出现在DOM中的时候,它让编译器附加指定的行为到DOM上. 这个过程是很简单的.angular内部有很用这样自带的指令,比如说n

angularjs 表单密码验证自定义指令实现代码_AngularJS

html代码 <form name="form"> <input type="password" name="password" ng-model="password" required placeholder="请输入密码"> <input type="password" name="passwordConfirm" ng-model=

AngularJS使用自定义指令替代ng-repeat的方法_AngularJS

前言 大家都知道对于处理小数量,ng-repeat是非常有用的,但是如果需要处理非常大的数量集,还是采用自定义的方法更好一些.特别是数据大多都是静态的或已预存储好的,这个时候应避免使用ng-repeat指令. ng-repeat中的表达式和 $watch Angular中的表达式都会创建$watch 的Scope 函数.用于监听模型变化,当你的模型部分发生变化时它会通知你.在ng-repeat指令中,如果某行数据有15列数据都绑定了表达式,如果数据有1000多行的话,那么$watch就又奖金15

c++-一道C++读取文件,动态数组和自定义指令的题目,有什么最优解答?

问题描述 一道C++读取文件,动态数组和自定义指令的题目,有什么最优解答? 读取123.txt,里面含有以下几种指令: ADD_F ADD_B REMOVE_F REMOVE_B RESULT 开始要求创建一个空数组 例如 ADD_F 2 3 5:在数组开头增加2 3 5 ADD_B 3 5 6:在数组结尾增加3 5 6 REMOVE_F 3:删掉数组头3个数字 REMOVE_B 2:删掉数组后2个数字 RESULT:输出当前数组 例子 ADD_F 1 2 3 ADD_B 5 6 7 RESUL

[Angularjs]自定义指令

写在前面 指令的作用可以简单的描述为实现语义化的标签,比如你在移动端h5应用中,有个经常用的功能,比如通讯录的功能,不同的页面都要用到,这时你可以将其封装为指令,在使用的时候可以通过这样<friends></friends>的语义化的标签直接在页面中使用即可. 例子 首先实现一个Helloworld的例子,让我们先上手自定义指令,先体会下指令的妙处. 定义指令helloword var app = angular.module('app_store', ['ngRoute', 'S

jfinal下超爽的freemarker自定义标签,web开发的利器,这分页怎么实现。

问题描述 jfinal下超爽的freemarker自定义标签,web开发的利器,这分页怎么实现. http://my.oschina.net/yongtree/blog/92309?p=2#commentsjfinal下超爽的freemarker自定义标签,web开发的利器,这分页怎么实现. 解决方案 前端自定义啦,后端jfinal就是pagepermate实现

AngularJS 的自定义指令

这是一篇angularjs自定义指令的教程.就让我们来看看,如何在angularjs中自定义指令吧!我们将利用现有的guitar angularjs app,这在 教程14: AngularJ表单验证 中用到过.你可以在这里下载 之前的app.好吧,现在我们看看angularjs的指令.我们知道: Angularjs Directives是DOM元素(例如属性,元素名,注释或CSS类)上的标记,它告诉AngularJS的 html 编译器($compile) 把特定的操作连接到DOM元素或转化为