<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ALL is Well!

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      30 隨筆 :: 23 文章 :: 71 評(píng)論 :: 0 Trackbacks

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

    <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

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

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

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

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

    最后我是用最后一種方法解決的問題。分頁組件上的問題也解決了。

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

    評(píng)論

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

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

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

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

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

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

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


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

    主站蜘蛛池模板: 亚洲黄色网址大全| 亚洲AV成人精品网站在线播放| 亚洲av无码久久忘忧草| 久久这里只精品99re免费 | 国产精品久久免费视频| 亚洲综合在线一区二区三区 | 激情小说亚洲色图| 国产精品免费一级在线观看| 色偷偷亚洲男人天堂| 国产乱弄免费视频| 免费无码一区二区| 久久精品亚洲乱码伦伦中文| 中出五十路免费视频| 亚洲AV无码一区二区二三区入口| a级毛片毛片免费观看久潮| 亚洲AV无码乱码国产麻豆穿越| 男女午夜24式免费视频| 久久久久亚洲AV无码网站| 啦啦啦高清视频在线观看免费 | 亚洲无吗在线视频| 国产男女猛烈无遮挡免费视频网站 | 亚洲一级毛片免费看| 最近最好的中文字幕2019免费| 最近中文字幕mv免费高清视频7| 亚洲欧洲日韩极速播放| 免费国产高清视频| 国产免费久久久久久无码| 亚洲av日韩av无码黑人| 国内精品免费麻豆网站91麻豆| 亚洲国产精品成人AV在线 | 亚洲国产精品无码一线岛国| 亚洲AV成人一区二区三区观看| 中文字幕无码日韩专区免费| 久久亚洲中文字幕精品有坂深雪 | 6080午夜一级毛片免费看6080夜福利 | 亚洲成片观看四虎永久| 男人进去女人爽免费视频国产| 中文字幕乱码亚洲精品一区| 亚洲黄片毛片在线观看| 久久久久久影院久久久久免费精品国产小说 | 色多多www视频在线观看免费|