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 来创建。

总结

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

相关文章

  • Spring Boot与Spring Security的跨域问题解决方案

    Spring Boot与Spring Security的跨域问题解决方案

    跨域问题是指在Web开发中,浏览器出于安全考虑,限制了不同域名之间的资源访问,本文重点给大家介绍Spring Boot与Spring Security的跨域问题解决方案,感兴趣的朋友一起看看吧
    2023-09-09
  • Java中的BlockingQueue接口源码解析

    Java中的BlockingQueue接口源码解析

    这篇文章主要介绍了Java中的BlockingQueue接口源码解析,BlockingQueue接口表示阻塞队列,是Java并发包中阻塞队列的接口定义规范,阻塞队列意味着对于该队列的操作是线程安全的,当多个线程存放元素进入队列或者从队列中取出元素都是线程安全的,需要的朋友可以参考下
    2023-11-11
  • Springboot整合Netty实现RPC服务器的示例代码

    Springboot整合Netty实现RPC服务器的示例代码

    这篇文章主要介绍了Springboot整合Netty实现RPC服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 浅谈java中守护线程与用户线程

    浅谈java中守护线程与用户线程

    本篇文章主要介绍了浅谈java中守护线程与用户线程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • JAVA多线程实现生产者消费者的实例详解

    JAVA多线程实现生产者消费者的实例详解

    这篇文章主要介绍了JAVA多线程实现生产者消费者的实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • java最新版本连接mysql失败的解决过程

    java最新版本连接mysql失败的解决过程

    这篇文章主要给大家介绍了关于java最新版本连接mysql失败的解决过程,文中通过图文以及示例代码将解决的过程介绍的非常详细,对遇到这个问题的同学具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Java如何获取相对路径文件

    Java如何获取相对路径文件

    这篇文章主要介绍了Java如何获取相对路径文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java单链表实现书籍管理系统

    java单链表实现书籍管理系统

    这篇文章主要为大家详细介绍了java单链表实现书籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Mac电脑安装多个JDK版本的详细图文教程

    Mac电脑安装多个JDK版本的详细图文教程

    目前使用的主流版本还是JDK 8,但偶尔会想体验下新版本(或者旧版本),如果能装多个版本的JDK,而且很方便的切换就好了,这篇文章主要给大家介绍了关于Mac电脑安装多个JDK版本的相关资料,需要的朋友可以参考下
    2024-03-03
  • 使用SpringBoot发送邮件的方法详解

    使用SpringBoot发送邮件的方法详解

    这篇文章主要介绍了使用SpringBoot发送邮件的方法详解,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05

最新评论