首页 > 代码库 > springmvc freemarker 页面访问静态类的解决方法

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;@Controllerpublic 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="http://www.mamicode.com/*.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>

页面使用 同上。

 

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

 

  

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