首先要感谢zuiyanwangyue提供给我的解决方法!!!
我是采用了displaytag提供的第二种分页方法
// 页数的参数名
String pageIndexName = new ParamEncoder(Constants.ABSENCE_LIST)
.encodeParameterName(TableTagParameters.PARAMETER_PAGE);
// 每页显示的条数
int pageSize = 15;
// 当前页
int pageIndex = GenericValidator.isBlankOrNull(request.getParameter(pageIndexName)) ? 0 : (Integer.parseInt(request.getParameter(pageIndexName)) - 1);
// 统计总记录数
int resultSize = (Integer) absMgr.getPypDepartmentAbsByTimesCount(condition[0], condition[1], condition[2]).get(0);
//获取导出的状态如果不为空.说明点击了导出按钮
String exportValue = request.getParameter(TableTagParameters.PARAMETER_EXPORTING);
if (exportValue == null || exportValue.equals("")) {
// 取得当前分页数据
studentAbsList = absMgr.getPypDepartmentAbsByTimesSql(pageIndex, pageSize, condition[0], condition[1], condition[2]);
}else {
//获取所有数据
studentAbsList = absMgr.fastGetDepAbs(condition);
}
//缺勤信息
request.setAttribute(Constants.ABSENCE_LIST, studentAbsList);
我觉得你说的问题可能和Displaytag的设计初衷有关,如果是一个特殊的列表,亦即table标签中的partialList="true",那么Table标签的处理类在进行初始化参数时(见TableTag的initParameters()方法),会做出相应的处理使得在页面上看到的数据和导出的数据条数是一样的,它并没有区别对待不同的媒体类型。
见TableTag的1065以及1066两行:
PaginationHelper paginationHelper = new PaginationHelper(pageNumber, pagesize);
this.tableIterator = paginationHelper.getIterator(this.list);
如果想要Displaytag适合你的要求恐怕就要修改Displaytag的源代码了,增加以下判断:
//检查当前的媒体类型
if(MediaTypeEnum.HTML.equals(this.currentMediaType)){
PaginationHelper paginationHelper = new PaginationHelper(pageNumber, pagesize);
this.tableIterator = paginationHelper.getIterator(this.list);
}else {
this.tableIterator = IteratorUtils.getIterator(this.list);
}
即如果是在页面上显示则进行分页,否则的话就遍历整个列表。
这样就应该满足你的要求了。
帮我解决此问题的人是zuiyanwangyue
一下是他的博客地址
http://zuiyanwangyue.iteye.com/
真的非常感谢他.因为本人还是学生...代码量不多.看了源代码3天了,还是一点头绪都没有.
今天收到zuiyanwangyue发来的消息.尝试改了一下源代码.结果行了.在这里再一次感谢zuiyanwangyue.谢谢!!!
我是采用了displaytag提供的第二种分页方法
// 页数的参数名
String pageIndexName = new ParamEncoder(Constants.ABSENCE_LIST)
.encodeParameterName(TableTagParameters.PARAMETER_PAGE);
// 每页显示的条数
int pageSize = 15;
// 当前页
int pageIndex = GenericValidator.isBlankOrNull(request.getParameter(pageIndexName)) ? 0 : (Integer.parseInt(request.getParameter(pageIndexName)) - 1);
// 统计总记录数
int resultSize = (Integer) absMgr.getPypDepartmentAbsByTimesCount(condition[0], condition[1], condition[2]).get(0);
//获取导出的状态如果不为空.说明点击了导出按钮
String exportValue = request.getParameter(TableTagParameters.PARAMETER_EXPORTING);
if (exportValue == null || exportValue.equals("")) {
// 取得当前分页数据
studentAbsList = absMgr.getPypDepartmentAbsByTimesSql(pageIndex, pageSize, condition[0], condition[1], condition[2]);
}else {
//获取所有数据
studentAbsList = absMgr.fastGetDepAbs(condition);
}
//缺勤信息
request.setAttribute(Constants.ABSENCE_LIST, studentAbsList);
我觉得你说的问题可能和Displaytag的设计初衷有关,如果是一个特殊的列表,亦即table标签中的partialList="true",那么Table标签的处理类在进行初始化参数时(见TableTag的initParameters()方法),会做出相应的处理使得在页面上看到的数据和导出的数据条数是一样的,它并没有区别对待不同的媒体类型。
见TableTag的1065以及1066两行:
PaginationHelper paginationHelper = new PaginationHelper(pageNumber, pagesize);
this.tableIterator = paginationHelper.getIterator(this.list);
如果想要Displaytag适合你的要求恐怕就要修改Displaytag的源代码了,增加以下判断:
//检查当前的媒体类型
if(MediaTypeEnum.HTML.equals(this.currentMediaType)){
PaginationHelper paginationHelper = new PaginationHelper(pageNumber, pagesize);
this.tableIterator = paginationHelper.getIterator(this.list);
}else {
this.tableIterator = IteratorUtils.getIterator(this.list);
}
即如果是在页面上显示则进行分页,否则的话就遍历整个列表。
这样就应该满足你的要求了。
帮我解决此问题的人是zuiyanwangyue
一下是他的博客地址
http://zuiyanwangyue.iteye.com/
真的非常感谢他.因为本人还是学生...代码量不多.看了源代码3天了,还是一点头绪都没有.
今天收到zuiyanwangyue发来的消息.尝试改了一下源代码.结果行了.在这里再一次感谢zuiyanwangyue.谢谢!!!