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

          主站蜘蛛池模板: 苍梧县| 临清市| 鄂尔多斯市| 绥化市| 安泽县| 石景山区| 咸宁市| 体育| 桦川县| 武胜县| 高雄县| 六安市| 高青县| 儋州市| 韩城市| 井陉县| 高淳县| 黄山市| 昌乐县| 鞍山市| 枞阳县| 高清| 景洪市| 金沙县| 渑池县| 西充县| 上杭县| 东乌| 彭州市| 溧水县| 江达县| 安乡县| 阿城市| 得荣县| 柳河县| 东阿县| 苍溪县| 马龙县| 玉田县| 曲周县| 洮南市|