springmvc freemarker 页面访问静态类的解决方法

一.利用BaseController 方式处理

定义BaseController 如下:

  

package com.ly.jxc.controller;



import org.springframework.stereotype.Controller;



import freemarker.ext.beans.BeansWrapper;

import freemarker.template.TemplateHashModel;

import freemarker.template.TemplateModelException;



@Controller

public class BaseController {

    private final static BeansWrapper wrapper = BeansWrapper

            .getDefaultInstance();

    private final static TemplateHashModel staticModels = wrapper

            .getStaticModels();



    protected static TemplateHashModel useStaticPacker(String packname) {

        TemplateHashModel fileStatics = null;

        try {

            fileStatics = (TemplateHashModel) staticModels.get(packname);

        } catch (TemplateModelException e) {

            e.printStackTrace();

        }

        return fileStatics;

    };



}

其他controller 继承 BaseController ,需要返回静态类时候 如下:

//register 静态访问

 map.put("rule",useStaticPacker("com.ly.jxc.RuleUtils"));

 页面使用:

    <#if user.canRead(RuleUtils.BUY_ORDER) || user.canRead(RuleUtils.BUY_LOG) >

.....

</#if>

二 使用配置方式

定义FreemarkerStaticModels.java  如下:

package com.ly.jxc.util;



import java.util.HashMap;

import java.util.Properties;

import java.util.Set;



import freemarker.ext.beans.BeansWrapper;

import freemarker.template.TemplateHashModel;

/**

 *   处理freeMarker  访问静态类静态方法

 * @author Administrator

 *

 */

public class FreemarkerStaticModels extends HashMap<Object, Object>{

    

    /**

     * 

     */

    private static final long serialVersionUID = 1L;

    private static FreemarkerStaticModels FREEMARKER_STATIC_MODELS;

    private Properties staticModels;



    private FreemarkerStaticModels(){

       

    }



    public static FreemarkerStaticModels getInstance(){

        if(FREEMARKER_STATIC_MODELS==null){

            FREEMARKER_STATIC_MODELS=new FreemarkerStaticModels();

        }

        return FREEMARKER_STATIC_MODELS;

    }

   

    public Properties getStaticModels() {

        return staticModels;

    }



    public void setStaticModels(Properties staticModels) {

        if(this.staticModels==null&&staticModels!=null){

            this.staticModels = staticModels;

            Set<String> keys=this.staticModels.stringPropertyNames();

            for (String key : keys) {

                FREEMARKER_STATIC_MODELS.put(key, useStaticPackage(this.staticModels.getProperty(key)));

            }

        }

    }



    public static TemplateHashModel useStaticPackage(String packageName){

        try

        {

          BeansWrapper wrapper = BeansWrapper.getDefaultInstance();

          TemplateHashModel staticModels = wrapper.getStaticModels();

          TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get(packageName);

          return fileStatics;

        }

        catch (Exception e)

        {

           e.printStackTrace(); 

        }

        return null;

    }



}

定义staticClass.properties 

RuleUtils=com.ly.jxc.util.RuleUtils

在springmvc.xml 配置文件中

<!-- freemarker 静态类的配置位置 -->

    <bean id="freemarkerStatic"

        class="org.springframework.beans.factory.config.PropertiesFactoryBean">

        <property name="location" value="classpath:staticClass.properties" />

    </bean>

    <!-- freemarker 静态类的解析配置-->

    <bean id="freemarkerStaticModels" 

        class="com.ly.jxc.util.FreemarkerStaticModels" factory-method="getInstance">

        <property name="staticModels" ref="freemarkerStatic"/>

    </bean>
<!-- 配置freeMarker视图解析器 -->



    <bean id="viewResolver"

        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">



        <property name="viewClass"

            value="com.ly.jxc.util.FreeMarkerPath" />



        <!-- <property name="viewNames" value="*.ftl"/> -->



        <property name="contentType" value="text/html; charset=utf-8" />

        <property name="allowSessionOverride" value="true" />

        <property name="cache" value="true" />



        <property name="prefix" value="" />



        <property name="suffix" value=".html" />

         

        <property name="order" value="0" />

        <!-- freemarker 静态类配置 -->

         <property name="attributesMap" ref="freemarkerStaticModels"/>
</bean>

页面使用 同上。

 

最后说下两种的选择: 第一种实用于哪里用到哪里调用,第二种是直接返回所有到页面。

 

  

你可能感兴趣的:(freemarker)