http://autumnice.blog.163.com/blog/static/5552002011912102954555/
http://blog.youkuaiyun.com/quzishen/article/details/6044615
freemarker中调用java的静态方法或静态变量。
一、直接使用
stack.findValue,即上面的
${stack.findValue("@com.xxx.util.CategoryUtil@getValue('key')")!}。当然,这种方法比较“丑陋”。
二、使用
${CategoryUtil.getPropertyValue("key")} 这类方法,但需要如下步骤:
1、在src下添加freemarkerstatic.properties文件,文件内容如下:
CategoryUtil=
com.xxx.util.CategoryUtil
2、创建FtlTmpFuwumiManager类(名字随便取,只要继承FreemarkerManager就行,还有我使用的是struts2.2.3):
public class
FtlTmpFuwumiManager
extends FreemarkerManager {
private static final Log LOG = LogFactory.getLog(
FtlTmpFuwumiManager
.class);
private static ResourceBundle r = ResourceBundle.getBundle("freemarkerstatic");
protected void loadSettings(ServletContext servletContext) {
super.loadSettings(servletContext);
try {
Configuration configuration = getConfiguration(servletContext);
Enumeration<String> en = r.getKeys();
String name, value;
BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel staticModels = wrapper.getStaticModels();
while (en.hasMoreElements()){
name = (String)en.nextElement();
value = r.getString(name);
TemplateHashModel tempStatics = (TemplateHashModel) staticModels.get(value); //这里就是允许用静态方法
configuration.setSharedVariable(name, tempStatics); //这里设置全局变量
}
} catch (Exception ex) { LOG.error("Error:",ex); }
}
}
3、最好一步,在struts.xml中添加:
<constant name="struts.freemarker.manager.classname" value="com.xxx.
FtlTmpFuwumiManager
" />
现在应该可以直接使用:
${CategoryUtil.getPropertyValue("key")} 了。