struts 中 Freemarker 调用 static 方法


http://autumnice.blog.163.com/blog/static/5552002011912102954555/



http://blog.csdn.net/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")} 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值