本文知识来自:http://www.cnblogs.com/yqweber/p/3992513.html
首先,经过本人的测试,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);
}
}
调用JAVA静态方法及属性的方法有三种
第一种:
直接将类的实例通过ModelMap传递到前端
Controller中的代码:
map.put("urlUtil", new UrlUtil());
HTML页面中的代码:
<#assign name=urlUtl.getUrl("Nwenzhang.css")>${name}
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;
};
}
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
UrlUtil=com.zxsd.test.util.UrlUtil
在springmvc.xml 配置文件中
第一种后端最简便,什么支持都不用,但是前端比较麻烦。
第一种和第二种是用哪些类就加入哪些类。
第三种是直接返回所有配置的类到页面。
网上还有一些其他的方法:
http://blog.csdn.net/tanguang_honesty/article/details/38554069
http://blog.csdn.net/quzishen/article/details/6044615
另外stauts中对freemarker调用JAVA方法和类有特殊的支持
http://blog.csdn.net/iamfafa/article/details/44302709
本人在这里就没有研究了。