ALL is Well!

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks

          問題
          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 李 明 閱讀(5837) 評論(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.####">  回復  更多評論
            

          主站蜘蛛池模板: 出国| 锦屏县| 郧西县| 永丰县| 临猗县| 蓬安县| 溧阳市| 滕州市| 济源市| 浦北县| 蒲城县| 乐东| 久治县| 曲麻莱县| 昭苏县| 大邑县| 南召县| 容城县| 措美县| 田阳县| 南京市| 如皋市| 鹤庆县| 全椒县| 高清| 汕尾市| 高平市| 广东省| 专栏| 获嘉县| 尖扎县| 突泉县| 田阳县| 吉木萨尔县| 剑河县| 广元市| 万山特区| 泽库县| 峨边| 青铜峡市| 岳普湖县|