Я использую внешний пейджинг / сортировку с пользовательским TableDecorator и следующей таблицей DisplayTag в JSP:
<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