Spring框架集成FreeMarker一、Spring in Action (转自 http://book.csdn.net/bookfiles/167/index.html ) FreeMarker比Velocity复杂一点点,但这只是它比Velocity的功能强大一点点的结果。FreeMarker提供了对一些常用任务的内置支持,比如日期和数字的格式化,以及去除空白字符。在Velocity中,这些特性只有通过附加工具才能实现。
1、配置FreeMarkerConfigurer <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> …… </bean> 通过freemarkerSettings属性,也能够设置其他FreeMarker的配置。例如,FreeMarker默认每隔5秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新,则可以将更新的延迟时间延长至一个小时或者更久。 可以通过为freemarkerSettings属性设置template_update_delay达到这一目的。例如: <property name="freemarkerSettings"> <props> <prop key="template_update_delay">3600</prop> </props> </property> 设置template_update_delay为3600(秒),因此FreeMarker只有在1个小时之后才检查模板是否更新。
2、解析FreeMarker视图 <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="suffix"><value>.ftl</value></property> </bean>
将请求和会话属性作为变量暴露给FreeMarker模板使用。要做到这一点,可以设置exposeRequestAttributes或者exposeSessionAttributes为true: <property name="exposeRequestAttributes"> <value>true</value> </property> <property name="exposeSessionAttributes"> <value>true</value> </property>
使用这些宏,必须设置FreeMarkerViewResolver的exposeMacroHelpers属性为true: <property name="exposeSpringMacroHelpers"> <value>true</value> </property>
3、在FreeMarker中绑定表单域 如: <@spring.bind "command.phone" /> phone: <input type="text" name="${spring.status.expression}" value="${spring.status.value}"> <font color="#FF0000">${spring.status.errorMessage}</font><br>
<@spring.bind "command.email" /> email: <input type="text" name="${spring.status.expression}" value="${spring.status.value}"> <font color="#FF0000">${spring.status.errorMessage}</font><br>
4、最后,你还需要做一件事才能使用FreeMarker宏。在所有需要使用<@spring.bind>和<@spring.bindEscaped>的FreeMarker模板的顶部增加以下一行: <#import "/spring.ftl" as spring /> 这一行会在模板中导入Spring的FreeMarker宏。
二、参阅:Spring Framework reference 2.0.5 参考手册中文版 使用Velocity或FreeMarker需要包含
1、Context 配置 <!-- freemarker config --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/> </bean> <!-- 也可以把ResourceBundle或XML文件配置到视图解析器中。如果你需要根据Locale来解析不同的视图,你就得使用resource bundle解析器。. --> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true"/> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> <!-- 如果你需要使用Spring 对 FreeMarker 宏命令的支持, 将这个属性设为true --> <property name="exposeSpringMacroHelpers" value="true"/> </bean>
2、创建模板 3、高级配置 4、绑定支持和表单处理
示例 <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/config/template/" /> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">0</prop> <prop key="default_encoding">UTF-8</prop> <prop key="locale">zh_CN</prop> </props> </property> </bean> |
|