displaytag確實(shí)有性能的問(wèn)題,最近又看到一個(gè)比較好的分頁(yè)列表控件,但同樣是每次分頁(yè)就重新提交整個(gè)頁(yè)面
確實(shí)頭痛而且笨拙。真的不如用ajax來(lái)處理這個(gè)問(wèn)題
如做一個(gè)tag,頁(yè)面上有:
<s:list? columnMap="" request=""/>
生成javascript的列表,完成后,立刻用ajax調(diào)用request中的請(qǐng)求,去得到列表值,顯示出來(lái)
同時(shí)界面提供 上一頁(yè)下一頁(yè)等翻頁(yè)和排序按鈕,當(dāng)按鈕被點(diǎn)擊,同樣去用ajax重取數(shù)據(jù)
有兩種方式
1 請(qǐng)求通過(guò)一個(gè)servlet通過(guò)反射轉(zhuǎn)發(fā)到原始Action的方法上。
在action中,除了一般的工作,另加若干如下方法:
Collection showList(httpRequest request);
對(duì)應(yīng)界面中的一個(gè)列表,專門(mén)負(fù)責(zé)處理列表。根據(jù)request里的信息(包括分頁(yè)和排序信息)返回適當(dāng)?shù)臄?shù)據(jù)
2 直接新建一個(gè)單獨(dú)action處理
有關(guān)分頁(yè)的計(jì)算,這里就不詳述,無(wú)非是獲得記錄總數(shù),從而計(jì)算出當(dāng)前頁(yè),并取得相應(yīng)數(shù)據(jù)。這里隨后臺(tái)不同而有不同實(shí)現(xiàn)。
當(dāng)取數(shù)據(jù)的時(shí)候,由于ajax的異步性質(zhì),最好在界面上有些進(jìn)度條之類的提示。
這樣整體方案其實(shí)并不復(fù)雜。美工上作漂亮些就行了,再支持一下數(shù)據(jù)導(dǎo)出。
要提到的是,分頁(yè)的情況,如果數(shù)據(jù)不一次全部取出,而是利用數(shù)據(jù)庫(kù)的 order by等來(lái)進(jìn)行分頁(yè)排序,效率確實(shí)提高,但就需要穿透邏輯層,同時(shí)排序字段必須是數(shù)據(jù)庫(kù)sql中的原始字段。
在邏輯層&DAO的處理上必須更仔細(xì),推薦采用一個(gè)PageBean攜帶所有的分頁(yè)信息(?查詢條件,排序字段/順序,當(dāng)前頁(yè)數(shù),總頁(yè)數(shù))? 。
?
?
?