FreeMarker如何調(diào)用Java靜態(tài)方法及靜態(tài)變量方法
FreeMarker調(diào)用Java靜態(tài)方法及靜態(tài)變量方法
這里介紹下在類似 Spring+FreeMarker 的架構(gòu)中如何在FreeMarker中訪問Java中的靜態(tài)方法以及靜態(tài)變量。
為了方便以及可復(fù)用先創(chuàng)建一個工具類
/** * 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` ,它會利用反射公開所有的靜態(tài)方法和靜態(tài)成員變量,包括 final 和 非final 的。
之后我們將這個 `HashModel` 添加至 Spring 的 Model 參數(shù)里面。
然后在 `Controller` 里面調(diào)用如上代碼即可
FreeMarkerUtils.initStatics(model);
在FreeMarker的 `.ftl` 文件中調(diào)用靜態(tài)方法和靜態(tài)變量
1.訪問靜態(tài)變量
${statics["com.springboot.constants.TestConstants"].NAME}
引號中間填入靜態(tài)變量所在的類路徑,中括號后面使用 . 來調(diào)用相應(yīng)變量就行。
2.訪問靜態(tài)方法
- I.首先我們使用 <#assign> 來定義下所要調(diào)用的類:
<#assign DateTimeUtils=statics['com.springboot.util.DateTimeUtils']>
- II.之后就可以盡情調(diào)用了:
${DateTimeUtils.formatDateTime(datetime)}
雖然網(wǎng)上搜羅出過不少其他解決方案的版本,但自己在沿用的過程中出現(xiàn)過些許不同的坑,于是重新整理了這套可行、可用,且暫未過期的方案
以前所使用的 `new BeansWrapper()` 以及 `BeansWrapper().getDefaultInstance()` 現(xiàn)在均已過期(被標(biāo)記為 @Deprecated)
新的 BeansWrapper 需要利用 BeansWrapperBuilder 來創(chuàng)建。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot與Spring Security的跨域問題解決方案
跨域問題是指在Web開發(fā)中,瀏覽器出于安全考慮,限制了不同域名之間的資源訪問,本文重點給大家介紹Spring Boot與Spring Security的跨域問題解決方案,感興趣的朋友一起看看吧2023-09-09Springboot整合Netty實現(xiàn)RPC服務(wù)器的示例代碼
這篇文章主要介紹了Springboot整合Netty實現(xiàn)RPC服務(wù)器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01JAVA多線程實現(xiàn)生產(chǎn)者消費者的實例詳解
這篇文章主要介紹了JAVA多線程實現(xiàn)生產(chǎn)者消費者的實例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06