FreeMarker如何調(diào)用Java靜態(tài)方法及靜態(tài)變量方法
FreeMarker調(diào)用Java靜態(tài)方法及靜態(tài)變量方法
這里介紹下在類(lèi)似 Spring+FreeMarker 的架構(gòu)中如何在FreeMarker中訪問(wèn)Java中的靜態(tài)方法以及靜態(tài)變量。
為了方便以及可復(fù)用先創(chuàng)建一個(gè)工具類(lèi)
/**
* 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);
}
}這里稍作解釋?zhuān)?/strong>
`wrapper.getStaticModels()` 會(huì)返回一個(gè) `TemplateHashModel` ,它會(huì)利用反射公開(kāi)所有的靜態(tài)方法和靜態(tài)成員變量,包括 final 和 非final 的。
之后我們將這個(gè) `HashModel` 添加至 Spring 的 Model 參數(shù)里面。
然后在 `Controller` 里面調(diào)用如上代碼即可
FreeMarkerUtils.initStatics(model);
在FreeMarker的 `.ftl` 文件中調(diào)用靜態(tài)方法和靜態(tài)變量
1.訪問(wèn)靜態(tài)變量
${statics["com.springboot.constants.TestConstants"].NAME}引號(hào)中間填入靜態(tài)變量所在的類(lèi)路徑,中括號(hào)后面使用 . 來(lái)調(diào)用相應(yīng)變量就行。
2.訪問(wèn)靜態(tài)方法
- I.首先我們使用 <#assign> 來(lái)定義下所要調(diào)用的類(lèi):
<#assign DateTimeUtils=statics['com.springboot.util.DateTimeUtils']>
- II.之后就可以盡情調(diào)用了:
${DateTimeUtils.formatDateTime(datetime)}雖然網(wǎng)上搜羅出過(guò)不少其他解決方案的版本,但自己在沿用的過(guò)程中出現(xiàn)過(guò)些許不同的坑,于是重新整理了這套可行、可用,且暫未過(guò)期的方案
以前所使用的 `new BeansWrapper()` 以及 `BeansWrapper().getDefaultInstance()` 現(xiàn)在均已過(guò)期(被標(biāo)記為 @Deprecated)
新的 BeansWrapper 需要利用 BeansWrapperBuilder 來(lái)創(chuàng)建。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
將Map轉(zhuǎn)換回String類(lèi)型的實(shí)現(xiàn)方式
這篇文章主要介紹了將Map轉(zhuǎn)換回String類(lèi)型的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比
這篇文章主要介紹了詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
idea每次新打開(kāi)的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題
這篇文章主要介紹了idea每次新打開(kāi)的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)
這篇文章主要介紹了java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
SpringBoot調(diào)用公共模塊的自定義注解失效的解決
這篇文章主要介紹了SpringBoot調(diào)用公共模塊的自定義注解失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java+Selenium實(shí)現(xiàn)文件上傳下載功能詳解
這篇文章主要介紹了java代碼如何利用selenium操作瀏覽器上傳和下載文件功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01
如何在Maven項(xiàng)目配置pom.xml指定JDK版本和編碼
maven是個(gè)項(xiàng)目管理工具,如果我們不告訴它要使用什么樣的jdk版本編譯,它就會(huì)用maven-compiler-plugin默認(rèn)的jdk版本來(lái)處理,這樣就容易出現(xiàn)版本不匹配的問(wèn)題,這篇文章主要給大家介紹了關(guān)于如何在Maven項(xiàng)目配置pom.xml指定JDK版本和編碼的相關(guān)資料,需要的朋友可以參考下2024-01-01

