也談DispalyTag解決大數據量顯示,分頁功能的問題!
最近我在一個blaog上看到一個老兄關于displaytag解決大數據量的文章。他是用封裝displaytag的方式寫了一個displaytagpro。我個人覺得沒有必要。一是封裝后的即使解決了大數據量的問題,將來升級也是個問題,難道還有天天關注你的程序更新?二是其實displaytag已經解決了大數據量分頁的問題。解決的補丁可以從這里下載DISPL-134.zip 。該補丁增加了table的virtualSize屬性。解決方式大致如下:
jsp:
<display:table class="list" name="<%= CodeListAction.CODE_LIST_KEY %>" id="row" pageSize="20" virtualSize="<%= ((Integer)request.getAttribute (CodeListAction.CODE_LIST_SIZE_KEY)).toString() %>" requestURI="codelist.do" sort="list">
在數據量大時可以設置virtualSize屬性,表示總記錄數。
action:
// Get the page number requested
int page = 1;
int size = 20;
Enumeration paramNames = request.getParameterNames
();
while (paramNames.hasMoreElements()) {
String name = (String)paramNames.nextElement();
if (name != null && name.startsWith("d-") &&
name.endsWith("-p")) {
String pageValue = request.getParameter(name);
if (pageValue != null) {
page = Integer.parseInt(pageValue);
}
}
}
DB:
數據層你可以根據數據庫的不同寫不同的adapter。下面是針對oracle的特性寫的。
select * from (
select query.*, rownum rnum from (
your complete query goes here....
) query where rownum <= (:pagingNo*:pagingSize)
) where rnum >= ((:pagingNo-1)*:pagingSize)+1 order by rnum
這樣就可以了。該問題可以查看http://jira.codehaus.org/browse/DISPL-134
要想更好的控制分頁,就用valuelist ,Extreme Table了。
風之語