FreeMarker如何调用Java静态方法及静态变量方法
FreeMarker调用Java静态方法及静态变量方法
这里介绍下在类似 Spring+FreeMarker 的架构中如何在FreeMarker中访问Java中的静态方法以及静态变量。
为了方便以及可复用先创建一个工具类
/**
* FreeMarker Utils.
*
* @author chenxinyu
*/
public abstract class FreeMarkerUtils {
/**
* init for static classes and fields.
*
* @param model model
*/
public static void initStatics(final Model model) {
// you can also create the Version like: new Version("2.3.27");
BeansWrapper wrapper = new BeansWrapper(new Version(2, 3, 27));
TemplateModel statics = wrapper.getStaticModels();
model.addAttribute("statics", statics);
}
}这里稍作解释:
`wrapper.getStaticModels()` 会返回一个 `TemplateHashModel` ,它会利用反射公开所有的静态方法和静态成员变量,包括 final 和 非final 的。
之后我们将这个 `HashModel` 添加至 Spring 的 Model 参数里面。
然后在 `Controller` 里面调用如上代码即可
FreeMarkerUtils.initStatics(model);
在FreeMarker的 `.ftl` 文件中调用静态方法和静态变量
1.访问静态变量
${statics["com.springboot.constants.TestConstants"].NAME}引号中间填入静态变量所在的类路径,中括号后面使用 . 来调用相应变量就行。
2.访问静态方法
- I.首先我们使用 <#assign> 来定义下所要调用的类:
<#assign DateTimeUtils=statics['com.springboot.util.DateTimeUtils']>
- II.之后就可以尽情调用了:
${DateTimeUtils.formatDateTime(datetime)}虽然网上搜罗出过不少其他解决方案的版本,但自己在沿用的过程中出现过些许不同的坑,于是重新整理了这套可行、可用,且暂未过期的方案
以前所使用的 `new BeansWrapper()` 以及 `BeansWrapper().getDefaultInstance()` 现在均已过期(被标记为 @Deprecated)
新的 BeansWrapper 需要利用 BeansWrapperBuilder 来创建。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot与Spring Security的跨域问题解决方案
跨域问题是指在Web开发中,浏览器出于安全考虑,限制了不同域名之间的资源访问,本文重点给大家介绍Spring Boot与Spring Security的跨域问题解决方案,感兴趣的朋友一起看看吧2023-09-09
Springboot整合Netty实现RPC服务器的示例代码
这篇文章主要介绍了Springboot整合Netty实现RPC服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01


最新评论