最近在看jeecms的项目,其中用到freemarker的宏定义,还有freemarker的自定义标签的功能
我看了一定的时间后,自己做出了一个总结,还望各位前辈能够帮忙修正
freemarker宏定义的出现是为了解决页面模板问题,
freemarker自定义标签的功能是为了解决,页面取后台的传值问题
对于自定义标签的步骤,明天在写嘿嘿
第一步:实现freemarker中TemplateDirectiveModel接口
public class TestCms implements TemplateDirectiveModel {
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) {
}
}
各个参数的意义详解
@param env:系统环境变量,通常用它来输出相关内容,如Writer out = env.getOut();
@param params 页面上传过来的值,以键值对的形式保存
@param loopVars 循环替代变量
@param body 用于处理自定义标签中的内容,如<@myDirective>将要被处理的内容</@myDirective>;当标签是<@myDirective />格式时,body=null
第二步:注入FreeMarkerConfigurer的freemarkerVariables中。
在jeecms-servlet-front.xml
<entry key="cms_test" value-ref="cms_test"/>
<bean id="cms_test" class="com.jeecms.cms.action.directive.TestCms"/>
第三步:调用自定义指令:
[@cms_test]
bar
[#list ["red", "green", "blue"] as color]
${color}
[/#list]
baaz
[/@cms_test]
第四步:
显示输出结果: