Freemarker和sitemesh中访问session的复杂类型值的方法

有时候想在sitemesh中访问session的值,而sitemesh又是用freemarker引擎的,所以问题就是如何在Freemarker里面访问session的复杂类型值。如果是自己写的类,基本上在freemarker里面不能类型转换的。还好Freemarker对HashMap的支持还比较好。最后这样处理:

把hashMap保存到session:

Map<String, Boolean> values = new HashMap<String, Boolean>();
values.put("mykey11", true);
//..... handle values.........
session.setAttribute("mykey",  values.size() == 0 ? null : values);

 

在Freemarker使用session:

<#assign = Session["mykey"]?if_exists >
<#if v?? >
  <#if v["mykey11"]?if_exists >
    <ul>
        <li>
          xxx
        </li>
    </ul>
  </#if>
</#if>

 

另外,在freemarker的ViewResolver里面要设置exposeSessionAttributes=true:

   <bean id="viewResolver"
        class
="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="viewClass"
            value
="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <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" />
    </bean>

 

posted on 2012-05-29 18:15  Mainz  阅读(1303)  评论(0编辑  收藏  举报

导航