ALL is Well!

          敏捷是一條很長的路,摸索著前進著

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks
          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          公告

          聲明:本博客文章如無特別注明,均為原創,作者保留所有權利!歡迎轉載,轉載請注明出處BlogJava

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          交流社區

          友情鏈接

          學習資源庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          問題
          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 on 2010-12-29 14:54 李 明 閱讀(5839) 評論(6)  編輯  收藏 所屬分類: Freemarker

          評論

          # re: freemarker數字格式化引入的問題 2010-12-29 19:50 disget
          ${size?c}就可以完成純數字輸出
          LZ火候欠大了
          多看多學習,別閉門造車
            回復  更多評論
            

          # re: freemarker數字格式化引入的問題 2010-12-30 08:48 禮物
          我暈,好好看看文檔再說吧,這不是bug  回復  更多評論
            

          # re: freemarker數字格式化引入的問題 2010-12-30 13:12 Ronaldo
          回復樓上:
          我有一點很奇怪了。
          我有說過這是freemarker的bug嗎?
          我是說我自己寫的東西,因為忽略了這一點,存在bug。
          由于freemarker這種將數字超過3位的格式化為形如1,000的,導致了我之前的寫一個分頁的宏點擊下一頁或上一頁時都會報異常。

          麻煩看清楚了再評論。謝謝。  回復  更多評論
            

          # re: freemarker數字格式化引入的問題 2010-12-30 13:23 Ronaldo
          @disget
          解決問題的方式有很多種。你說的方法也確實可行。
          但這個要在每個需要的地方都要這樣寫才行。  回復  更多評論
            

          # re: freemarker數字格式化引入的問題 2012-09-07 14:35 youke
          @disget
          這是個辦法但是工作量太大,很是麻煩的。自己水平有限還批評別人,忒搞笑了吧  回復  更多評論
            

          # re: freemarker數字格式化引入的問題 2012-09-28 10:09 禮物
          @Ronaldo
          “我之前有一個隨筆,基于Struts2、Freemarker的分頁組件實現(附工程源碼) ,便因為freemarker的數字格式化問題,存在一個bug。
          在數據超過1000時候,點擊下一頁,便會報錯。原因是將1,000傳到了后臺,當作是總記錄數,而這個值并非數值。”


          針對這個問題freemarker可以使用格式化定義: <#setting number_format="0.####">  回復  更多評論
            

          主站蜘蛛池模板: 南木林县| 保德县| 柘荣县| 嘉义市| 卢龙县| 宁强县| 河北区| 建宁县| 黄浦区| 钟祥市| 金昌市| 囊谦县| 巴中市| 宣威市| 邯郸县| 黄龙县| 富顺县| 泗水县| 合肥市| 鄂尔多斯市| 沅陵县| 汾阳市| 宝鸡市| 宁德市| 五峰| 五指山市| 达拉特旗| 北流市| 石景山区| 柳江县| 克拉玛依市| 马山县| 大关县| 克什克腾旗| 平江县| 资阳市| 改则县| 黄平县| 云龙县| 攀枝花市| 张掖市|