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"/>本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 MATLAB APP 制作出现问题
- ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
- ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
- ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
- ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
- ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
- ¥15 信息管理系统的查找和排序
- ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
- ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
- ¥15 PB中矩阵文本型数据的总计问题。