ALL is Well!

          敏捷是一條很長(zhǎng)的路,摸索著前進(jìn)著

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 23 文章 :: 71 評(píng)論 :: 0 Trackbacks
          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          公告

          聲明:本博客文章如無(wú)特別注明,均為原創(chuàng),作者保留所有權(quán)利!歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處BlogJava

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          交流社區(qū)

          友情鏈接

          學(xué)習(xí)資源庫(kù)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          問(wèn)題
          freemarker在解析數(shù)據(jù)格式的時(shí)候,默認(rèn)將數(shù)字按3位來(lái)分割,例如1000被格式化為1,000,這樣做看似美觀,但在實(shí)際操作時(shí)候會(huì)帶來(lái)問(wèn)題。例如我一個(gè)頁(yè)面有一個(gè)元素,該元素的值由后臺(tái)綁定且超過(guò)1000,那么當(dāng)我要使用這個(gè)元素的值的時(shí)候,便會(huì)出現(xiàn)問(wèn)題。
          例如,我在ftl文件中這樣寫(xiě):

          <input type="hidden" id="testElement" name="testElement" value="${size}" />
          假設(shè)后臺(tái)綁定的size為1000。

          然后我在js里使用這個(gè)testElement元素的值。
          var t = $("#testElement");
          alert(t);
          alert(parseInt(t));
          alert(Number(t));


          得到的值是:
          1,000
          1
          NaN

          這下悲劇了,沒(méi)有一個(gè)是我想要的數(shù)值類(lèi)型1000,這讓我情何以堪啊。

          我之前有一個(gè)隨筆,基于Struts2、Freemarker的分頁(yè)組件實(shí)現(xiàn)(附工程源碼) ,便因?yàn)閒reemarker的數(shù)字格式化問(wèn)題,存在一個(gè)bug。
          在數(shù)據(jù)超過(guò)1000時(shí)候,點(diǎn)擊下一頁(yè),便會(huì)報(bào)錯(cuò)。原因是將1,000傳到了后臺(tái),當(dāng)作是總記錄數(shù),而這個(gè)值并非數(shù)值。

          解決問(wèn)題
          * 在模板中直接加.toString()轉(zhuǎn)化數(shù)字為字符串,如:${size.toString()};
          * 在freemarker配置文件freemarker.properties(在類(lèi)路徑下即可)加<#setting number_format="#">;
          * 在模板中直接加<#setting number_format="#">;
          * 通過(guò)freemarker.template.Configuration的config.setNumberFormat("#")來(lái)設(shè)定freemarker對(duì)數(shù)值的格式化;

          其實(shí)后三種方法的思路是一致的,只是實(shí)現(xiàn)方法不同而已。如果應(yīng)用中已經(jīng)存在了 freemarker.properties 并配置了其他的屬性,可以在這里配置,否則推薦使用最后一種方法。

          最后我是用最后一種方法解決的問(wèn)題。分頁(yè)組件上的問(wèn)題也解決了。

          posted on 2010-12-29 14:54 李 明 閱讀(5834) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): Freemarker

          評(píng)論

          # re: freemarker數(shù)字格式化引入的問(wèn)題 2010-12-29 19:50 disget
          ${size?c}就可以完成純數(shù)字輸出
          LZ火候欠大了
          多看多學(xué)習(xí),別閉門(mén)造車(chē)
            回復(fù)  更多評(píng)論
            

          # re: freemarker數(shù)字格式化引入的問(wèn)題 2010-12-30 08:48 禮物
          我暈,好好看看文檔再說(shuō)吧,這不是bug  回復(fù)  更多評(píng)論
            

          # re: freemarker數(shù)字格式化引入的問(wèn)題 2010-12-30 13:12 Ronaldo
          回復(fù)樓上:
          我有一點(diǎn)很奇怪了。
          我有說(shuō)過(guò)這是freemarker的bug嗎?
          我是說(shuō)我自己寫(xiě)的東西,因?yàn)楹雎粤诉@一點(diǎn),存在bug。
          由于freemarker這種將數(shù)字超過(guò)3位的格式化為形如1,000的,導(dǎo)致了我之前的寫(xiě)一個(gè)分頁(yè)的宏點(diǎn)擊下一頁(yè)或上一頁(yè)時(shí)都會(huì)報(bào)異常。

          麻煩看清楚了再評(píng)論。謝謝。  回復(fù)  更多評(píng)論
            

          # re: freemarker數(shù)字格式化引入的問(wèn)題 2010-12-30 13:23 Ronaldo
          @disget
          解決問(wèn)題的方式有很多種。你說(shuō)的方法也確實(shí)可行。
          但這個(gè)要在每個(gè)需要的地方都要這樣寫(xiě)才行。  回復(fù)  更多評(píng)論
            

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

          # re: freemarker數(shù)字格式化引入的問(wèn)題 2012-09-28 10:09 禮物
          @Ronaldo
          “我之前有一個(gè)隨筆,基于Struts2、Freemarker的分頁(yè)組件實(shí)現(xiàn)(附工程源碼) ,便因?yàn)閒reemarker的數(shù)字格式化問(wèn)題,存在一個(gè)bug。
          在數(shù)據(jù)超過(guò)1000時(shí)候,點(diǎn)擊下一頁(yè),便會(huì)報(bào)錯(cuò)。原因是將1,000傳到了后臺(tái),當(dāng)作是總記錄數(shù),而這個(gè)值并非數(shù)值。”


          針對(duì)這個(gè)問(wèn)題freemarker可以使用格式化定義: <#setting number_format="0.####">  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 五峰| 中阳县| 苍梧县| 蓬莱市| 饶河县| 乌兰浩特市| 湖北省| 阜平县| 民勤县| 江达县| 长阳| 出国| 天镇县| 阜平县| 准格尔旗| 三明市| 潜江市| 高台县| 海南省| 永胜县| 阳江市| 辽宁省| 岢岚县| 南华县| 南平市| 措美县| 南阳市| 天峻县| 新化县| 平谷区| 平邑县| 思茅市| 丹东市| 泰和县| 德格县| 鹤庆县| 子长县| 扶风县| 太白县| 永仁县| 双牌县|