freemarker 自定义指令,需要实现TemplateDirectiveModel 类中的
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException 方法,改方法中的TemplateModel[] loopVars 怎么用呢?网上搜了半天也没看明白,请问这个参数怎么用,最好给个例子
freemarker 自定义指令
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- jinbingchuan 2013-04-12 16:29关注
给你一个例子
public class OperatorDirective implements TemplateDirectiveModel{@Override public 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里可以这样配置
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
/<!-- 全局变量部分 --> <property name="freemarkerVariables"> <entry key="previlegeModuleEnum" value-ref="previlegeModuleEnum" /> </map> </property> </bean>
最后在模板里使用
<@ operatorDirective roleId="data" code ="data"/>本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥65 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥200 uniapp长期运行卡死问题解决
- ¥15 latex怎么处理论文引理引用参考文献
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?