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 来创建。
FreeMarker调用Java静态方法以及静态变量的方法的更多相关文章
- 关于Java的静态:静态类、静态方法、静态变量、静态块等
原文地址:Java static keyword - Class, Method, Variable, Block, import - JournalDev 很少看到文章能把静态这个问题解释的很清楚, ...
- java之静态方法,静态变量
在自动化测试中,经常会用到静态方法和静态变量.那么什么是静态方法和静态变量呢?以及在什么情况下使用呢?下面来说一说 静态方法和静态变量是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象 ...
- C#中静态类、静态方法和静态变量的简单说明
静态方法与静态变量一样,属于类本身,而不属于哪个类的一个对象.调用一个被定义为static的方法,只有通过在它前面加上这个类的名称.一般定义里说是可以通过实例调用的.其他语言我还没测试,但是在C#中是 ...
- Objective-C 静态变量 使用方法
详解Objective-C中静态变量使用方法 Objective-C中静态变量使用方法是本文要介绍的内容,Objective-C 支持全局变量,主要有两种实现方式:第一种和C/C++中的一样,使用&q ...
- Qt中静态变量使用方法
静态变量可以在各个页面之前使用 先定义一个用于存放静态变量的类 例如datavar 在datavar.h中添加如下代码 #ifndef DATAVAR_H #define DATAVAR_H #inc ...
- Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖
Java中只有非私有的实例方法能被重写,即实现多态,子类可以覆盖父类的方法,但是实例变量不能覆盖,若子类和父类均定义了同样名称的变量,则对于子类来说这是两个不同的变量,要想调用父类的变量必须显示去调用 ...
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
- JAVA的静态方法,静态变量,静态类。
静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象 ...
- Java中的静态变量、静态方法、静态代码块
转载自http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html (一)静态方法(1)在Java里,可以定义一个不需要创建对 ...
随机推荐
- /etc/sudoer文件配置简析
参考: http://blog.chinaunix.net/uid-26642180-id-3962245.html # User privilege specification root AL ...
- 【AS3 Coder】任务八:没剧情还玩毛RPG
使用框架:AS3任务描述:了解RPG游戏中剧情播放器的制作原理及流程难度系数:3(了解原理,能根据XML文件播放剧情) / 5(会制作剧情编辑器) 本章源码下载:http://www.iamseven ...
- ACboy needs your help-分组背包模板题
id=17676" target="_blank" style="color:blue; text-decoration:none">ACboy ...
- Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示
本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中几个基础的概念和专门用于机器学习的数据类型 特征向量Vector: Vector的概念是和数学中的向量 ...
- Selenium用法示例
收录待用,修改转载已取得腾讯云授权 前言 在上一节我们学习了PhantomJS 的基本用法,归根结底它是一个没有界面的浏览器,而且运行的是 JavaScript 脚本,然而这就能写爬虫了吗?这又和Py ...
- spark完全分布式集群搭建
最近学习Spark,因此想把相关内容记录下来,方便他人参考,也方便自己回忆吧 spark开发环境的介绍资料很多,大同小异,很多不能一次配置成功,我以自己的实际操作过程为准,详细记录下来. 1.基本运行 ...
- [TypeScript] Dynamically Allocate Function Types with Conditional Types in TypeScript
Conditional types take generics one step further and allow you to test for a specific condition, bas ...
- 小程序app is not defined
错误记录: 小程序丨 报错:app is not defined; 解决方案: Js头部添加:var app = getApp(); 返回按钮: wx.navigateBack(); 转发 ...
- linux/unix核心设计思想
1) 程序应该小而专一,程序应该尽量的小,且仅仅专注于一件事上.不要开发那些看起来实用可是90%的情况都用不到的特性: 2) 程序不仅仅要考虑性能, 程序的可移植性更重要,shell和perl.pyt ...
- 【Python3 爬虫】11_报错No module named 'requests'
从网上下载了一段源码,执行过程中报错: No module named 'requests' 一看英文就明白是咋回事了~ 是由于:没有模块requests 解决方案 打开cmd,在窗口运行命令:pip ...