在Java中FreeMarker?模板來(lái)定義字符串模板
問(wèn)題描述
- 一個(gè)業(yè)務(wù)需求,需要在后端通過(guò)代碼渲染一個(gè),列表如下圖所示(下圖只是一個(gè)示意):
這個(gè)表格的特點(diǎn)就是數(shù)據(jù)重復(fù)比較多,結(jié)構(gòu)簡(jiǎn)單,我們可以通過(guò) Java 代碼直接拼字符串。但是這樣的問(wèn)題就會(huì)導(dǎo)致,代碼非常的難看。在 Java 代碼中混雜著很多樣式代碼,可讀性和可維護(hù)性比較差。所以我就 pass
著這個(gè)方案。
于是我就想到,通過(guò)模板 + 參數(shù)的方式來(lái)實(shí)現(xiàn),這樣可以做到結(jié)構(gòu)和參數(shù)的分離,經(jīng)過(guò)比較我選擇了通過(guò) FreeMarker
模板來(lái)定義結(jié)構(gòu),最終完成字符串模板的定義。
代碼實(shí)現(xiàn)
- 導(dǎo)入依賴,這里我是基于
spring-boot
為基礎(chǔ)的。
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
- FreeMarker 工具方法,主要是實(shí)現(xiàn)模板文件的讀取和渲染。
@Slf4j public class FreeMarkerUtils { static Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); static { cfg.setEncoding(Locale.ENGLISH, "utf-8"); cfg.setTemplateLoader(new SpringTemplateLoader(new DefaultResourceLoader(),"templates/")); } /** * 獲取模板 * * @param templateName * @return */ public static Template getTpl(String templateName){ try { Template template = cfg.getTemplate(templateName); return template; } catch (Exception e) { log.error("獲取模板失敗 {}",templateName,e); return null; } } /** * 獲取模板寫入后的內(nèi)容 * * @param templateName * @param model * @return */ public static Optional<String> getTplText(String templateName, Map<String, Object> model){ try { Template template = cfg.getTemplate(templateName); String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model); return Optional.ofNullable(text); } catch (Exception e) { log.error("獲取模板內(nèi)容失敗 {}",templateName,e); return Optional.empty(); } } }
- 定義模板,如下所示(下面知識(shí)一個(gè)示意):
<#list list as item> ${item.url} | ${item.name} | ${item.age} </#list>
- 使用模板并且返回渲染后的字符串,最終返回字符串。
Map<String, Object> model = new HashMap<>(); model.put("list", new ArrayList()) FreeMarkerUtils.getTplText("a.html", model);
問(wèn)題總結(jié)
- 我們使用模板的方式可以減少字符串的拼接,提高代碼的可維護(hù)性。
- 如果我們系統(tǒng)中代碼風(fēng)格比較統(tǒng)一,我們可以通過(guò)這種方式來(lái)生成代碼(只需要對(duì)數(shù)據(jù)庫(kù)的 table meta 進(jìn)行讀取,然后再定義 Java 代碼模板即可)。
到此這篇關(guān)于在Java中FreeMarker 模板來(lái)定義字符串模板的文章就介紹到這了,更多相關(guān)FreeMarker 定義字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java Spring整合Freemarker的詳細(xì)步驟
- Java操作FreeMarker模板引擎的基本用法示例小結(jié)
- 使用Java進(jìn)行FreeMarker的web模板開發(fā)的基礎(chǔ)教程
- 基于Java的Spring框架來(lái)操作FreeMarker模板的示例
- java Freemarker頁(yè)面靜態(tài)化實(shí)例詳解
- Java實(shí)現(xiàn)用Freemarker完美導(dǎo)出word文檔(帶圖片)
- 基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word
- JAVA集成Freemarker生成靜態(tài)html過(guò)程解析
- Java超級(jí)實(shí)用的Freemarker工具類
- Java使用Freemarker頁(yè)面靜態(tài)化生成的實(shí)現(xiàn)
相關(guān)文章
Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud 服務(wù)網(wǎng)關(guān)Zuul的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定
這篇文章主要幫助大家理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定,在Java中存在兩種綁定方式,一種為靜態(tài)綁定,另一種就是動(dòng)態(tài)綁定,亦稱為后期綁定,感興趣的小伙伴們可以參考一下2016-02-02java自定義ClassLoader加載指定的class文件操作
這篇文章主要介紹了java自定義ClassLoader加載指定的class文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式
這篇文章主要介紹了Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池?zé)o效問(wèn)題)
這篇文章主要介紹了springboot2整合redis使用lettuce連接池(解決lettuce連接池?zé)o效問(wèn)題),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12SpringBoot 調(diào)度任務(wù)及常用任務(wù)表達(dá)式
這篇文章主要介紹了SpringBoot 調(diào)度任務(wù)及常用任務(wù)表達(dá)式,需要的朋友可以參考下2017-12-12