在一篇blog里我在回復里寫了displaytag1.1大數據量分頁顯示的索引存在bug
http://www.tkk7.com/zJun/archive/2006/02/27/32723.html
后來下載源代碼下來找到了修改bug的地方。
并把代碼發到 displaytag的jira里了,具體地址在:
http://jira.codehaus.org/browse/DISPL-303 (有人已經提交這個bug了)
org.displaytag.pagination.SmartListHelper.java
把下面兩個方法的代碼改寫如下:
public int getFirstIndexForCurrentPage() {
return (this.currentPage - 1) * this.pageSize;
}
/**
* Returns the index into the master list of the last object that should appear on the current page that the user is
* viewing.
* @return int
*/
protected int getLastIndexForCurrentPage() {
if (this.partialList) {
return (getFirstIndexForCurrentPage()) +
Math.min(this.pageSize - 1, this.fullList.size() - 1);
} else {
return getLastIndexForPage(this.currentPage);
}
}
順便記錄 displaytag 1.1 使用Partial Lists大數據量分頁的例子:
在近量不改動現有代碼的基礎上來使用displaytag結合數據庫分頁.
1.先設置總頁數:
<%
Integer totalNum = new Integer(919);
request.setAttribute("totalNum",totalNum);//設置總記錄條數
%>
2.配置displaytag的 兩個屬性:partialList="true" size="totalNum"
比如:
<display:table id="testtbid" name="requestScope.testlist" pagesize="20" partialList="true" size="totalNum">
3.在jsp中獲得翻頁信息的代碼:
<%
下面代碼是取得翻頁數
//如果沒有為table設置 id那么就要寫成ParamEncoder(null);
String rpname = new org.displaytag.util.ParamEncoder("testtbid")
.encodeParameterName(
org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);
System.out.println("當前頁數:" + rpname + " = " +
request.getParameter(rpname));
//然后根據當前頁數去從數據庫中取出相應數據。
//see: http://displaytag.sourceforge.net/11/displaytag/apidocs/org/displaytag/tags/TableTagParameters.html
%>
表格分頁導航條里的分頁鏈接個數默認是8個,可以通過下面的代碼來更改
//在<display:table>標簽內
<display:setProperty name="paging.banner.group_size" value="20"/>
//</display:table>
當然也可以通過實現 org.displaytag.pagination.PaginatedList接口來完成這個要求。
更多信息,請參考:
http://displaytag.sourceforge.net/11/tut_externalSortAndPage.html
利用內置el在displaytag里顯示checkbox非常簡單:
<display:column title='select User' >
<input type="checkbox" name="firstName" value="{testtbid.name}" />${testtbid.name}
</display:column>