我在 JSP 中使用带有自定义 TableDecorator 和以下 DisplayTag 表的外部分页/排序:
<display:table id="ixnlist" name="pageScope.itemList" sort="external"
decorator="org.mdibl.ctd.pwa.displaytag.decorator.IxnTableWrapper">
<display:column title="Row" property="rowNum" />
...more columns...
</display:table>
在表格装饰器中,getListIndex() 只返回与当前页面相关的行号,而不是整个列表(即,如果我们每页显示 100 个对象,那么 getListIndex() 在页面顶部返回“0” 2,不是“100”)。
/**
* Returns the row number data for the current row.
*
* @return String containing row number heading.
*/
public String getRowNum() {
final StringBuilder out = new StringBuilder(8);
out.append(nf.format(getListIndex() + 1))
.append('.');
return out.toString();
}
表装饰器中是否有可能以某种方式获得反映正确偏移量的行号?Displaytag知道某个地方的偏移量,因为它使用它来格式化分页链接。
displaytag 文档没有解决这个问题,并且 ${row_rowNum} 隐式对象的工作方式与装饰器中的 getListIndex() 相同。
是的,可以通过将行号列添加到分页 SQL 并让 TableDecorator 使用它(如果可用)来做到这一点,但我宁愿不依赖 DAO 来获取这种元数据。以下 TableDecorator 方法利用 rownum 列(如果存在),否则使用 getListIndex():
/**
* Returns the row number data for the current row.
*
* @return String containing row number heading.
*/
public String getRowNum() {
final StringBuilder out = new StringBuilder(8);
final Map row = (Map) getCurrentRowObject();
// Use 'rnum' column for external pagination if it exists.
// Kludgy way of doing this.
if (row.get("rnum") != null) {
out.append(nf.format(row.get("rnum")));
} else {
out.append(nf.format(getListIndex() + 1));
}
out.append('.');
return out.toString();
}
谢谢。
/mcr