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.####">  回復  更多評論
            

          主站蜘蛛池模板: 定远县| 方城县| 游戏| 侯马市| 奈曼旗| 获嘉县| 霍林郭勒市| 白朗县| 抚顺县| 南木林县| 济南市| 重庆市| 丰镇市| 历史| 搜索| 侯马市| 中宁县| 裕民县| 南投县| 威宁| 林周县| 临武县| 惠来县| 扎兰屯市| 佛教| 胶南市| 耿马| 泰安市| 图木舒克市| 鹤庆县| 正定县| 随州市| 油尖旺区| 缙云县| 南木林县| 高尔夫| 陵水| 灵丘县| 北票市| 龙南县| 漳浦县|