首页 > 代码库 > 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 页面访问静态类的解决方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。