本节主要分析Spring + FreeMarker的集成。
先介绍一下 spring+freemarker的集成主要涉及以下配置项:
1、配置 FreeMarkerConfigurer
……
通过 freemarkerSettings 属性,也能够设置其他 FreeMarker 的配置。例如, FreeMarker 默认每隔 5 秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新,则可以将更新的延迟时间延长至一个小时或者更久。
可以通过为 freemarkerSettings 属性设置 template_update_delay 达到这一目的。例如:
3600
设置 template_update_delay 为 3600 (秒),因此 FreeMarker 只有在 1 个小时之后才检查模板是否更新。
2、解析 FreeMarker 视图
.ftl
将请求和会话属性作为变量暴露给 FreeMarker 模板使用。要做到这一点,可以设置 exposeRequestAttributes 或者 exposeSessionAttributes 为 true :
true true
使用这些宏,必须设置 FreeMarkerViewResolver 的 exposeMacroHelpers 属性为 true :
true
3、在 FreeMarker 中绑定表单域
<@spring.bind "command.phone" />
phone:
${spring.status.errorMessage}
<@spring.bind "command.email" />
email:
${spring.status.errorMessage}
4、最后,你还需要做一件事才能使用FreeMarker 宏
<@spring.bindEscaped>的FreeMarker模板的顶部增加以下一行:
<#import "/spring.ftl" as spring />
这一行会在模板中导入Spring的FreeMarker宏。
Jeecms中相关的配置文件如下----------------->:
总体说明:
1、定义FreeMaker引入文件,index.ftl前缀为p,spring.ftl的前缀为s,这样在饮用ftl模版的宏定义时,可以简略使用。
/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s
在html表单中的使用,例如:
<@p.form id="jvForm" action="o_update.do" labelWidth="12">
<@p.td
。。。。
2、在jeecms中,请求回话属性都不允许暴露给freemarker使用。。(不知道是否跟freemarker不支持集群有关系????这样是否可以支持集群 )
........
以下是涉及到的配置文件:
........ contextConfigLocation /WEB-INF/config/application-context.xml /WEB-INF/config/cache-context.xml /WEB-INF/config/captcha-context.xml /WEB-INF/config/jeecore-context.xml /WEB-INF/config/jeecms-context.xml
在这个配置文件中,freeMarkerConfigurer作为 StaticPageSvcImpl的一个属性,注入到这个类中。
freeMarkerConfigurer的配置包括freemarker定义的标签(见freemarkerVariables),freemarkerSettings中定义了一些详细的属性。
详见前面的描述。
auto_detect 5 UTF-8 UTF-8 zh_CN true,false yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss 0.###### true /WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s
view resolver 配置:
freemarkerConfig 配置:
0 UTF-8 UTF-8 zh_CN true,false yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss 0.###### true /ftl/pony/index.ftl as p,/ftl/spring.ftl as s
view resolver 配置:
freemarkerConfig 配置:参数配置与jeecms-servlet-admin.xml类似。
auto_detect 5 UTF-8 UTF-8 zh_CN true,false yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss 0.###### true /WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s
至此,JeeCms中的FreeMarker的配置已经分析完毕。