这3都加起来,很难。网上没有解决方案,用了一天才把环境搭起来。
记录如下。
先把springmvc 在 web.xml上的配置:
<servlet>
<servlet-name>xxx-ftl</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- <init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/xxx-mvc-ftl.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>xxx-ftl</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
这里规定了一下freemarker的配置文件的名字。xxx-mvc-ftl.xml。
以下是xxx-mvc-ftl.xml的配置:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths">
<list>
<value>/WEB-INF/freemarker/</value>
<value>/</value>
<value>classpath:modules</value>
<value>classpath:org/springframework/web/servlet/view/freemarker</value>
</list>
</property>
<!-- 直接将Freemarker.propertyies写在单独的.properties注入进来-->
<property name="freemarkerSettings">
<props>
<!--<prop key="template_update_delay">60000</prop>-->
<prop key="default_encoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">MM/dd/yyyy</prop>
<prop key="number_format">#</prop>
<prop key="whitespace_stripping">true</prop>
</props>
</property>
<!--全局变量部分-->
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape"/>
<entry key="html_escape" value-ref="fmHtmlEscape" />
<entry key="webRoot" value="${webRoot}"/>
<entry key="cssRoot" value="${cssRoot}"/>
<entry key="jsRoot" value="${jsRoot}"/>
</map>
</property>
<property name="defaultEncoding" value="utf-8"/>
</bean>
<bean id="viewResolverFreemarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!--<property name="cache" value="true"/>-->
<property name="suffix" value=".ftl"/>
<!--如果你需要使用Spring 对 FreeMarker 宏命令的支持, 将这个属性设为true-->
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="order" value="1" />
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
<bean id="fmHtmlEscape" class="freemarker.template.utility.HtmlEscape" />
以下是decorators.xml和网上一样。
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/includes/decorators">
<excludes>
<pattern>index.html</pattern>
</excludes>
<decorator name="main" page="main.dec">
<pattern>*.htm</pattern>
</decorator>
</decorators>
重点来了。要把以下加入web.xml里面
<!--sitemesh-->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--sitemesh freemarker-->
<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.dec</url-pattern>
</servlet-mapping>
<url-pattern>*.dec</url-pattern> 这里我把sitemesh的模板后缀名定为 .dec,所以就用这个过滤!
完毕!