在使用displaytag顯示數(shù)字時(shí),如果對(duì)數(shù)字進(jìn)行了HTML包裝,那么就有可能造成排序結(jié)果的不正確。
displaytag排序的方法是:compare(Object object1, Object object2)
1.如果object1,object2都是String,則按String排序;
2.如果object1,object2實(shí)現(xiàn)了Comparable接口,則compareTo方法比較,這樣純數(shù)字排序因?yàn)槟軌蜣D(zhuǎn)換成實(shí)現(xiàn)Comparable接口的數(shù)字類型所以排序結(jié)果正確;
3.其他情況轉(zhuǎn)換成String比較。
因此,組裝成HTML的列就默認(rèn)按String來(lái)比較,造成排序結(jié)果與預(yù)期不符。
例如需要排序displaytag中帶超級(jí)鏈接的數(shù)字列:
s1: <a href="www.example.com?id=53">53</a>
s2: <a href="www.example.com?id=9">9</a>
則比較結(jié)果s1 < s2,顯然和我們預(yù)期的相反。
解決的方法:
1.自定義一個(gè)Comparator類,實(shí)現(xiàn)你自己的比較規(guī)則,在頁(yè)面需要的列中配置<display:column title="..." property="..." comparator="你實(shí)現(xiàn)的Comparator類名">
2.外排序
3.如果只是需要把數(shù)字排正確,更簡(jiǎn)單的方法是寫一個(gè)數(shù)字的format類,在decorator組裝HTML時(shí)在數(shù)字前補(bǔ)0對(duì)齊:
s1: <a href="www.example.com?id=00053">53</a>
s2: <a href="www.example.com?id=00009">9</a>
另外,如果每列需要比較數(shù)字前的HTML不是相同的,可以添加隱藏域來(lái)解決。例如:
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>
歡迎訪問(wèn)我的blog: http://www.eoss.cn/blog/