Spring框架集成FreeMarker一、Spring in Action (轉(zhuǎn)自 http://book.csdn.net/bookfiles/167/index.html ) FreeMarker比Velocity復(fù)雜一點(diǎn)點(diǎn),但這只是它比Velocity的功能強(qiáng)大一點(diǎn)點(diǎn)的結(jié)果。FreeMarker提供了對(duì)一些常用任務(wù)的內(nèi)置支持,比如日期和數(shù)字的格式化,以及去除空白字符。在Velocity中,這些特性只有通過附加工具才能實(shí)現(xiàn)。
1、配置FreeMarkerConfigurer <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> …… </bean> 通過freemarkerSettings屬性,也能夠設(shè)置其他FreeMarker的配置。例如,FreeMarker默認(rèn)每隔5秒檢查模板是否被更新,如果已經(jīng)更新了,就會(huì)重新加載并分析模板。但經(jīng)常檢查模板是否更新可能比較耗時(shí)。如果你的應(yīng)用運(yùn)行在生產(chǎn)模式下,而且你預(yù)期模板不會(huì)經(jīng)常更新,則可以將更新的延遲時(shí)間延長(zhǎng)至一個(gè)小時(shí)或者更久。 可以通過為freemarkerSettings屬性設(shè)置template_update_delay達(dá)到這一目的。例如: <property name="freemarkerSettings"> <props> <prop key="template_update_delay">3600</prop> </props> </property> 設(shè)置template_update_delay為3600(秒),因此FreeMarker只有在1個(gè)小時(shí)之后才檢查模板是否更新。
2、解析FreeMarker視圖 <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="suffix"><value>.ftl</value></property> </bean>
將請(qǐng)求和會(huì)話屬性作為變量暴露給FreeMarker模板使用。要做到這一點(diǎn),可以設(shè)置exposeRequestAttributes或者exposeSessionAttributes為true: <property name="exposeRequestAttributes"> <value>true</value> </property> <property name="exposeSessionAttributes"> <value>true</value> </property>
使用這些宏,必須設(shè)置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 /> 這一行會(huì)在模板中導(dǎo)入Spring的FreeMarker宏。
二、參閱:Spring Framework reference 2.0.5 參考手冊(cè)中文版 使用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文件配置到視圖解析器中。如果你需要根據(jù)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 對(duì) FreeMarker 宏命令的支持, 將這個(gè)屬性設(shè)為true --> <property name="exposeSpringMacroHelpers" value="true"/> </bean>
2、創(chuàng)建模板 3、高級(jí)配置 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> |
|