FreeMarker如何调用Java静态方法及静态变量方法

 更新时间:2023年12月27日 16:03:15   作者:Colder丶  
这篇文章主要介绍了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 来创建。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringAop源码及调用过程概述

    SpringAop源码及调用过程概述

    这篇文章主要介绍了SpringAop源码及调用过程概述,Spring AOP(面向切面编程)是Spring框架的一个重要特性,它提供了一种在程序运行期间动态地将额外的行为织入到代码中的方式,需要的朋友可以参考下
    2023-10-10
  • Java中转义字符反斜杠\的代替方法及repalceAll内涵解析

    Java中转义字符反斜杠\的代替方法及repalceAll内涵解析

    这篇文章主要介绍了Java中转义字符反斜杠\的代替方法及repalceAll内涵解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • JavaWeb之监听器案例讲解

    JavaWeb之监听器案例讲解

    这篇文章主要介绍了JavaWeb之监听器案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java实现邮箱找回密码实例代码

    Java实现邮箱找回密码实例代码

    本篇文章主要介绍了Java实现邮箱找回密码实例代码,可以通过邮箱找回丢失密码,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • SpringBoot集成Nacos的项目实践

    SpringBoot集成Nacos的项目实践

    本文主要介绍了SpringBoot集成Nacos的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Spring Boot实现通用的接口参数校验

    Spring Boot实现通用的接口参数校验

    本文介绍基于 Spring Boot 和 JDK8 编写一个 AOP ,结合自定义注解实现通用的接口参数校验。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 教你如何在Intellij IDEA中集成Gitlab

    教你如何在Intellij IDEA中集成Gitlab

    今天来简单说下,如何在IDEA中集成gitlab项目,默认情况下IDEA中的 VCS => Checkout From Version Control 选项中是没有gitlab这一项的,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • Java Web开发项目中中文乱码解决方法汇总

    Java Web开发项目中中文乱码解决方法汇总

    这篇文章主要为大家详细汇总了Java Web开发项目中中文乱码的解决方法,分析了5种Java Web中文乱码情况,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • springboot加载注入bean的几种方式

    springboot加载注入bean的几种方式

    本文主要介绍了springboot加载注入bean的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • nacos配置文件优先级过程

    nacos配置文件优先级过程

    这篇文章主要介绍了nacos配置文件优先级过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论