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>

页面使用 同上。

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

  

时间: 2024-11-02 18:25:01

springmvc freemarker 页面访问静态类的解决方法的相关文章

项目部署到tomcat6.0启动成功后访问页面报500错误解决方法

如题:项目部署到tomcat6.0启动成功后访问页面报500错误解决方法,很奇葩,启动的时候没有任何问题,但输入访问地址后报500,去年国庆放假前夕,为这个问题伤神了半天最后解决了,今天又碰到了,乍一看摸不着头,后面仔细回想了下,迅速解决了问题. 原因:项目里面的jar和tomcat里面lib里面的jar重复了. 解决方法: 1.要么更换tomcat7或之后的版本,之后的版本就不会出现这个问题. 2.去部署之后的tomcat的webapps\项目名\WEB-INF\lib 里面删掉jsp-api

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法

第一步,修改spring的配置文件和springmvc的配置文件 --------------------------------applicationContext.xml <context:annotation-config/>  <context:component-scan base-package="com.xxx"> <context:exclude-filter type="annotation" expression=&

客户端登录提示 :拒绝访问Temp目录解决方法

系统环境搭建好后,在客户端运行,登录提示:拒绝访问Temp目录解决方法,IIS apppool\oaserver没有访问temp目录的权限. 引起原因:因为服务端目录Temp权限不足解决方法:把 C:\Windows\Temp 目录设 为IIS_IUSRS权限即可. 原文地址:http://bbs.delit.cn/thread-729-1-1.html 转载请注明出处: 撰写人:度量科技http://www.delit.cn

CentOS+Apache+php无法访问redis的解决方法 Redis server went away

在CentOS下配置Apache+php+redis+phpredis环境.编辑访问redis缓存的php程序test.php,以应用程序方式在后台运行,可成功访问Redis,而在Apache下以网页形式访问时则出错,在访问Redis以及之后的代码均不再执行.查看Apache的日志:/var/log/httpd/error_log,发现代码运行时出现异常:PHP Fatal error: Uncaught exception 'RedisException' with message 'Redi

ASP.NET对路径&quot;C:/.......&quot;的访问被拒绝 解决方法小结

问题: 异常详细信息: System.UnauthorizedAccessException: 对路径“C:/Supermarket/output.pdf”的访问被拒绝. 解决方法: 一.在IIS中的默认应用程序池-->高级设置...-->标识改成Local System可以解决该问题. 二.在需要进行读写操作的目录下添加Network Service这个帐号. 具体过程:对该文件夹按右键--属性--安全--添加--高级--立即查找--在“搜索结果”下选“NETWORK SERVICE”--确

(转)apache外网不能访问分析与解决方法

转自:http://blog.sina.com.cn/s/blog_6bb7ebcc0101g0aw.html 说明:新手,配完到生效,机器可能有个延迟,切记,这个延迟是正常的. apache安装好以后,在本机可以用:http://localhost 或者 http://127.0.0.1进行访问,但是,在外网(相对本机来说的,局域网也算)不能访问. 这种情况可以分为两个问题,第一个是在局域网内,第二国是在互联网: 有三种情况可能造成这种现象, 1.配置文件没有设置外网访问: 2.防火墙,计算机

apache外网不能访问分析与解决方法

apache安装好以后,在本机可以用:http://localhost 或者 http://127.0.0.1进行访问,但是,在外网(相对本机来说的,局域网也算)不能访问. 这种情况可以分为两个问题,第一个是在局域网内,第二国是在互联网: 有三种情况可能造成这种现象, 1.配置文件没有设置外网访问: 2.防火墙,计算机本身的防火墙禁止了外网通过80端口(默认的,也可以自定义别的)访问: 3.80端口没有对外网开放,或者局域网内,或者互联网(外网防火墙或者其他运帷软件): 如果你配置的服务器是个远

&amp;#65279导致页面顶部空白一行解决方法

找了半天,以为是自己写的代码问题原来是被编码格式坑了.当我百度了才知道原来是这样子的. 文件编辑的时候utf-8带了bom头. 这种编码方式一般会在windows操作系统中出现,比如记事本编辑器,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM). 它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码. 对于一般的文件,这样并不会产生什么麻烦. 但对于html来说,BOM是个大麻烦. 因为浏览器在解析html页

CentOS+Apache+php无法访问redis的解决方法

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases. PHP安装redis扩展 以下操作需要在下载的 phpredis 目录中完成: $ wget https://github.com/phpredis/phpredis/ar