项目中用到了displaytag1.2,用来做分页,
jsp代码<display:column>标签中又用到了其他的Struts标签来显示数据。
结果当提交的页码大于实际页码时,页面数据显示出了问题。
像<display:column title="ID" property="id" class="colid" />这样的数据可以显示
而包含在<display:column>标签中的Struts标签数据无法显示。
百般无奈的情况下,查看displaytag源代码,发现TableTag.java中的initParameters函数存在如下代码:
仔细看下来,下面这段有问题
想找最新的displaytag包,但是看官网给人的感觉是不再更新了。
只能自己把jar包解压缩了,替换了TableTag.class,然后再打包成jar包,正常。
改了他们的类,希望他们不要告我。
jsp代码<display:column>标签中又用到了其他的Struts标签来显示数据。
结果当提交的页码大于实际页码时,页面数据显示出了问题。
像<display:column title="ID" property="id" class="colid" />这样的数据可以显示
而包含在<display:column>标签中的Struts标签数据无法显示。
百般无奈的情况下,查看displaytag源代码,发现TableTag.java中的initParameters函数存在如下代码:
// can we actually skip any row?
if (wishOptimizedIteration && (this.list instanceof Collection) // we need to know the size
&& ((sortColumn == -1 // and we are not sorting
|| !finalSortFull // or we are sorting with the "page" behaviour
) && (this.currentMediaType == MediaTypeEnum.HTML // and we are not exporting
|| !this.properties.getExportFullList()) // or we are exporting a single page
))
{
int start = 0;
int end = 0;
if (this.offset > 0)
{
start = this.offset;
}
if (length > 0)
{
end = start + this.length;
}
if (this.pagesize > 0)
{
int fullSize = ((Collection< ? >) this.list).size();
start = (this.pageNumber - 1) * this.pagesize;
// invalid page requested, go back to last page
if (start > fullSize)
{
int div = fullSize / this.pagesize;
start = (fullSize % this.pagesize == 0) ? div : div + 1;
}
end = start + this.pagesize;
}
// rowNumber starts from 1
filteredRows = new LongRange(start + 1, end);
}
else
{
filteredRows = new LongRange(1, Long.MAX_VALUE);
}
仔细看下来,下面这段有问题
// invalid page requested, go back to last page
if (start > fullSize)
{
int div = fullSize / this.pagesize;
start = (fullSize % this.pagesize == 0) ? div : div + 1;
}
想找最新的displaytag包,但是看官网给人的感觉是不再更新了。
只能自己把jar包解压缩了,替换了TableTag.class,然后再打包成jar包,正常。
改了他们的类,希望他们不要告我。