freemarker java方法_freemarker页面中调用java方法

首先,经过本人的测试,freemarker只能调用Java的Public static 方法及属性

背景说明:框架使用的是spring+springmvc+freemarker

package com.zxsd.test.util;

import java.util.HashMap;

import java.util.Map;

public class UrlUtil {

private static final Map urls = new HashMap();

static {

urls.put("Nwenzhang.css", "/css/Nwenzhang.css");

urls.put("Guang.css", "/css/Guang.css");

urls.put("bootstrap.min.css", "/bootstrap/css/bootstrap.min.css");

urls.put("Nwenzhang.css", "/css/Nwenzhang.css");

}

public static String getUrl(String key) {

return urls.get(key);

}

}

第一种:

直接将类的实例通过ModelMap传递到前端

Controller中的代码:

map.put("urlUtil", new UrlUtil());

HTML页面中的代码:

${name}

第二种:

定义BaseController 如下:

package com.zxsd.test.action.base;

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 ,需要返回静态类时候 如下:

map.put("urlUtil", useStaticPacker("com.zxsd.test.util.UrlUtil"));

在页面中调用:

${UrlUtil.getUrl("Nwenzhang.css")!}

第三种:

定义FreemarkerStaticModels.java 如下:

package com.zxsd.test.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{

/**

*

*/

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 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

UrlUtil=com.zxsd.test.util.UrlUtil

在springmvc.xml 配置文件中

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

class="com.zxsd.test.util.FreemarkerStaticModels" factory-method="getInstance">

最后说下三种的选择:

第一种后端最简便,什么支持都不用,但是前端比较麻烦。

第一种和第二种是用哪些类就加入哪些类。

第三种是直接返回所有配置的类到页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值