spring 中配置如下:
<bean id="freemarkerConfigurer"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="classic_compatible">true</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">#</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="boolean_format">true,false</prop>
</props>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".ftl"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="exposeRequestAttributes" value="true"/>
<property name="exposeSessionAttributes" value="true"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="requestContextAttribute" value="request"/>
</bean>
百度的代码不能工作:
<#assign cookies = request.getCookies()>
<#list cookies as cookie>
<#if cookie.name = "userName">
${cookie.name}
${cookie.value}
</#if>
</#list>
问题是这样:
我需要取一个cookie值添加到所有的ftl页面的变量中。
如果从spring mvc的controller中取再传到model中,每个@RequestMaping的method中都得要这样做,非常麻烦。
freemarker的共享变量配置,看例子都是配置静态值,这样需要从其它地方读并且解析的,怎么处理?
我也尝试过自定义ObjectWrapper,但似乎没搞懂这个ObjectWrapper是怎么工作的,和Velocity有些差别。
cookie这个变量是要从控制器获得,传入模板的
UPDATE
将评论中的内容移到回答里面来,方便查看。
我想到的方案是写一个拦截器(springmvc的interceptor),将请求中的cookies取出set到请求的参数中,然后在模板中,使用${RequestParameters['cookies.username']}这样的方式取出。这样就可以做到不用在每个controller里面去set这个变量了。