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 并配置了其他的属性,可以在这里配置,否则推荐使用最后一种方法。

最后我是用最后一种方法解决的问题。分页组件上的问题也解决了。

 

posted @   243573295  阅读(10872)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示