欢迎光临
我们一直在努力

freemarker 定义变量,freemarker 变量赋值

这里介绍下在类似?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 来创建。 94927935

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。