用displaytag展現大數據量數據

Displaytag1.1支持在外部實現大數據量分頁。主要有兩種方式實現:

Displaytag 1.1 offers two alternative ways for working with partial lists:

the first one uses the valuelist pattern, and requires that the object that you give to displaytag implements the org.displaytag.pagination.PaginatedList interface. You can pass this object to displaytag as an usual list, and it will extract paging and sorting information from it. This way is more recommended if you have to build your backend layer and you can easily follow this pattern. 

a second way, recommended if you only have to use partial list for few tables that show a performance problem using full lists, is passing all the needed parameters as separate tag attributes (recors to be shown, page number, total number of records...) 
其中第二種方式看起來較爲簡單,只需在 <displaytag> 中增加兩個屬性:partialList="true" size="resultSize"即可,但是在使用發現這種方式由於是在原來內存分頁的基礎上修改的,所以還是存在一些Bug(比如:分頁導航的值不會變......)

所以這裏介紹Displaytag推薦的第一種方式,即:
實現org.displaytag.pagination.PaginatedListorg.displaytag.pagination.PaginatedList接口。

實現PaginatedList接口:
Java code
import java.util.List; import org.displaytag.pagination.PaginatedList; import org.displaytag.properties.SortOrderEnum; /** */ /** * 分頁列表 * * @author John.Zhu * */ public class PageList implements PaginatedList { /** */ /** * 每頁的列表 */ private List list; /** */ /** * 當前頁碼 */ private int pageNumber = 1 ; /** */ /** * 每頁記錄數 page size */ private int objectsPerPage = 15 ; /** */ /** * 總記錄數 */ private int fullListSize = 0 ; private String sortCriterion; private SortOrderEnum sortDirection; private String searchId; public List getList() { return list; } public void setList(List list) { this .list = list; } public int getPageNumber() { return pageNumber; } public void setPageNumber( int pageNumber) { this .pageNumber = pageNumber; } public int getObjectsPerPage() { return objectsPerPage; } public void setObjectsPerPage( int objectsPerPage) { this .objectsPerPage = objectsPerPage; } public int getFullListSize() { return fullListSize; } public void setFullListSize( int fullListSize) { this .fullListSize = fullListSize; } public String getSortCriterion() { return sortCriterion; } public void setSortCriterion(String sortCriterion) { this .sortCriterion = sortCriterion; } public SortOrderEnum getSortDirection() { return sortDirection; } public void setSortDirection(SortOrderEnum sortDirection) { this .sortDirection = sortDirection; } public String getSearchId() { return searchId; } public void setSearchId(String searchId) { this .searchId = searchId; } }


 Contoller:


Java code
/** */ /** * 分頁查詢 * * @param request * @param response * @return * @throws Exception */ private ModelAndView paging(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception { // 獲取當前頁數,displaytag通過參數"page"傳遞這個值 int pageNumber; if (request.getParameter( " page " ) != null && ! "" .equals(request.getParameter( " page " ))) { pageNumber = Integer.parseInt(request.getParameter( " page " )); } else { pageNumber = 1 ; } PageList pageList = new PageList(); Map map = WebUtils.getParametersStartingWith(request, " search_ " ); Page page = dao.query(map, pageNumber, PAGE_SIZE); // 設置當前頁數 pageList.setPageNumber(pageNumber); // 設置當前頁列表 pageList.setList(page.getResults()); // 設置page size pageList.setObjectsPerPage(PAGE_SIZE); // 設置總頁數 pageList.setFullListSize(page.getTotalCount()); mav.addObject( " results " , pageList); return mav; }


  好了,現在直接在JSP上使用 displaytag就行了:
 
HTML code
< display:table name ="${results}" id ="row" class ="simple nocol" pagesize ="${pageSize}" export ="true" decorator ="org.displaytag.decorator.TotalTableDecorator" requestURI ="${pageContext.request.contextPath}/pageQuery.do?method=paging" > < display:column property ="date.time" title ="日期" format ="{0,date,yyyy-MM-dd}" sortable ="false" /> < display:column property ="code" title ="編碼" group ="1" sortable ="false" /> < display:column property ="name" title ="名稱" group ="1" sortable ="false" /> < display:column property ="costTotal" title ="總額(元)" format ="{0,number,0,000}" total ="true" sortable ="false" /> </ display:table >  
發佈了16 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章