爲解決Thymeleaf數字格式化問題而想到的幾種方案

背景: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數值格式化問題。

相關文章
相關標籤/搜索