freemarker如何访问cookie?

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有些差别。

阅读 8.4k
3 个回答

cookie这个变量是要从控制器获得,传入模板的

UPDATE
将评论中的内容移到回答里面来,方便查看。

我想到的方案是写一个拦截器(springmvc的interceptor),将请求中的cookies取出set到请求的参数中,然后在模板中,使用${RequestParameters['cookies.username']}这样的方式取出。这样就可以做到不用在每个controller里面去set这个变量了。

你这段代码也没有错,关键是需要先在后端的controller里面set了,你在页面上才能get取得到,不然就是空啊。

试试Springmvc的拦截器Interceptor。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题