Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 303|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    前天 12:49
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-5-25 17:30:24 | 显示全部楼层 |阅读模式

    一.利用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>

    页面使用 同上。

     

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

     

      

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-8 18:13 , Processed in 0.060669 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表