Freemarker-數字默認格式化問題


  freemarker在解析數據格式的時候,默認將數字按3位來分割

例如1000被格式化為1,000

  這樣做看似美觀,但在實際操作時候會帶來問題。例如我一個頁面有一個元素,該元素的值由后台綁定且超過1000,那么當我要使用這個元素的值的時候,便會出現問題。

例如,ftl文件中這樣寫:

<input type="hidden" id="testElement" name="testElement" value="${size}" />

假設后台綁定的size為1000。
然后我在js里使用這個testElement元素的值。

var t = $("#testElement");
alert(t);
alert(parseInt(t));
alert(Number(t));

得到的值是:

1,000
1
NaN

 

這下悲劇了,沒有一個是我想要的數值類型1000,這讓我情何以堪啊。

我之前有一個隨筆,基於Struts2、Freemarker的分頁組件實現(附工程源碼) ,便因為freemarker的數字格式化問題,存在一個bug。
在數據超過1000時候,點擊下一頁,便會報錯。原因是將1,000傳到了后台,當作是總記錄數,而這個值並非數值。

解決問題

* 在模板中直接加.toString()轉化數字為字符串,如:${size.toString()};
* 在freemarker配置文件freemarker.properties(在類路徑下即可)加<#setting number_format="#">* 在模板中直接加<#setting number_format="#">* 通過freemarker.template.Configuration的config.setNumberFormat("#")來設定freemarker對數值的格式化;

 

其實后三種方法的思路是一致的,只是實現方法不同而已。如果應用中已經存在了 freemarker.properties 並配置了其他的屬性,可以在這里配置,否則推薦使用最后一種方法。

最后我是用最后一種方法解決的問題。分頁組件上的問題也解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM