shinewang

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            53 隨筆 :: 0 文章 :: 200 評論 :: 0 Trackbacks

          在使用displaytag顯示數字時,如果對數字進行了HTML包裝,那么就有可能造成排序結果的不正確。

          displaytag排序的方法是:compare(Object object1, Object object2)
          1.如果object1,object2都是String,則按String排序;
          2.如果object1,object2實現了Comparable接口,則compareTo方法比較,這樣純數字排序因為能夠轉換成實現Comparable接口的數字類型所以排序結果正確;
          3.其他情況轉換成String比較。

          因此,組裝成HTML的列就默認按String來比較,造成排序結果與預期不符。
          例如需要排序displaytag中帶超級鏈接的數字列:
          s1: <a href="www.example.com?id=53">53</a>
          s2: <a href="www.example.com?id=9">9</a>
          則比較結果s1 < s2,顯然和我們預期的相反。

          解決的方法:
          1.自定義一個Comparator類,實現你自己的比較規則,在頁面需要的列中配置<display:column title="..." property="..." comparator="你實現的Comparator類名">
          2.外排序
          3.如果只是需要把數字排正確,更簡單的方法是寫一個數字的format類,在decorator組裝HTML時在數字前補0對齊:
          s1: <a href="www.example.com?id=00053">53</a>
          s2: <a href="www.example.com?id=00009">9</a>

          另外,如果每列需要比較數字前的HTML不是相同的,可以添加隱藏域來解決。例如:
          s1: <a href="www.example.com?id=100">53</a>
          s2: <a href="www.example.com?id=200">9</a>
          修改為:
          s1: <input type="hidden" name="sortValue" value="00053"><a href="www.example.com?id=100">53</a>
          s2: <input type="hidden" name="sortValue" value="00009"><a href="www.example.com?id=200">9</a>

          歡迎訪問我的blog: http://www.eoss.cn/blog/

          posted on 2008-11-05 21:19 shinewang 閱讀(1819) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 高台县| 铜梁县| 永平县| 新化县| 彭阳县| 富锦市| 乐平市| 搜索| 赞皇县| 花莲县| 乌鲁木齐市| 浮山县| 天津市| 渝中区| 绥芬河市| 社会| 监利县| 巨鹿县| 东山县| 卢龙县| 绍兴县| 兰州市| 牙克石市| 曲靖市| 调兵山市| 湘乡市| 十堰市| 佛学| 灵丘县| 崇仁县| 将乐县| 卢氏县| 封丘县| 南漳县| 武平县| 伊吾县| 灵川县| 和龙市| 伊宁县| 昭平县| 靖宇县|