Thymeleaf 自定義函數——Thymeleaf 模板執行Java代碼並同後端Java解耦

相信大家關於Thymeleaf並不陌生,關於其使用請參考API文檔:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html(英文版,保持耐心看完吧);今天主要記錄一下Thymeleaf模板中調用Java代碼中問題——模板與後端Java代碼耦合度太高。

例:需求是根據配置外貿訂單單據模板,通過模板引擎將訂單通過模板解析出來,生成訂單PDF單據或Excel單據並打印。

解決方案:前端通過類似Excel的方式畫了單據外觀樣式,並將後端接口字段融合進去最終生成滿足Thymeleaf語法的HTML文檔,模板引擎根據接口數據解析配置的模板,生成數據填充好的HTML文檔並轉成PDF或Excel文檔。

問題:單據中有很多需要邏輯處理的地方,如計算金額,金額轉大寫……

熟悉Thymeleaf的同學或閱讀過上面api的同學知道,它自己本身是支持一部分函數的,但是我們自己想擁有自己的邏輯的函數時它無法提供,我們可以在其中調用Java代碼,如:<td th:text="${new com.sl.test.util.NumberToENGLISH().numberToText(total1.getSum())}" class=" no-pre htRight htMiddle" colSpan="36" rowSpan="1"/>,這個Java方法是將數值total1.getSum()轉爲英文金額,但是這裏的Java代碼將Java類的包名全暴露給了模板,第一很不安全,第二當我們調整了包結構,這裏的模板也必須跟着調整,這時間很麻煩的事。我們可以通過如下方式去實現解耦:

這裏通過session方式或request方式也可以。

記錄問題處理,共同討論,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章