背景:html
spring後端輸出double類型數據,前端使用thymeleaf框架,格式化double數據類型,因爲須要顯示原值(好比原來錄入5,而不能顯示5.00),所以須要存儲數值(存儲值爲decimal類型,其中2位小數)小數點後面進行去零處理,而不能採用thymeleaf自己的格式化方式。前端
思路:java
1.嘗試thymeleaf自己自帶函數解決,未果(thymeleaf自己方法處理沒法去除小數點後面的0,只能顯示固定的小數點位數)。web
2.採用JS解決,感受有些麻煩,並且與thymeleaf結合也較困難,做罷。spring
3.因爲Java後臺處理比較擅長處理數值格式化問題,而thymeleaf也正巧在服務端完成解析標籤工做,那麼可否讓thymeleaf框架調用Java方法呢?理論上是可行的,通過不斷摸索,終於實驗成果。apache
4.擴展thymeleaf標籤後端
通過對比發現,方法3實現較簡單,具體作法以下:框架
實現方法:函數
方法1:thymeleaf框架調用Java靜態方法:spa
編寫一個Java類,裏面寫一個靜態方法,用於處理double類型數據格式化,返回字符串。詳細代碼以下:
package com.hw.ibweb.util; import org.apache.http.util.TextUtils; import java.math.BigDecimal; import java.text.DecimalFormat; /** * Created by clyan on 2019/10/23 10:08. */ public class FormatUtil { /** * double小數點格式化 * @param value * @return */ public static String valueFormat(double value) { DecimalFormat df = new DecimalFormat("#####.##"); String xs = df.format(new BigDecimal(value)); return xs; } }
而後,在相關html中,採用以下寫法:
<input type="text" class="form-control" width="250px" maxlength="6" placeholder="最長6位數字" name="code" th:attr="id=${item.dcitCode}" th:value="${T(com.hw.ibweb.util.FormatUtil).valueFormat(item.money)}" aria-label="Text input with checkbox"/>
即,採用thymeleaf框架的${T(fullclasspath).function()}接口解決,結果以下:
至此,thymeleaf框架調用Java靜態方法的思路已經實現,那麼thymeleaf框架可否調用Java實例方法呢?通過實踐發現,也是沒問題的。
方法二:thymeleaf調用Java實例方法:
實例方法:
package com.hw.ibweb.util; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.text.DecimalFormat; /** * Created by clyan on 2019/10/10 11:57. */ public class bbb { public String valueFormat(double value) { DecimalFormat df = new DecimalFormat("#####.##"); String xs = df.format(new BigDecimal(value)); return xs; } }
在html頁面中,調用該方法寫法以下:
<input type="text" class="form-control" width="250px" maxlength="6" placeholder="最長6位數字" name="code" th:attr="id=${item.dcitCode}" th:value="${new com.hw.ibweb.util.bbb().valueFormat(item.money)}" aria-label="Text input with checkbox"/>
最終能效果也如預期:
至此,完整解決double數值格式化問題。