在一篇blog里我在回复里写了displaytag1.1大数据量分页显示的索引存在bug
http://www.blogjava.net/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>