相信大家關於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方式也可以。
記錄問題處理,共同討論,共同進步