3

我在 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

4

1 回答 1

1

您应该能够通过引用请求中的页码来计算正确的总体索引值。

编写类似这样的代码,您的TableDecorator课程应该可以工作:

public String getIndex() {
   int numItemsPerPage = 100;
   int page = Integer.parseInt(getPageContext().getRequest().getParameter("page"));
   int index = getListIndex();

   return ((page - 1) * numItemsPerPage) + index + 1;
}
于 2009-06-09T18:33:33.617 回答