Pergunta

Eu estou usando paginação externa / classificação com um TableDecorator personalizado e a tabela a seguir DisplayTag em um 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> 

No decorador mesa, getListIndex () retorna o número da linha em relação apenas à página atual, não para a lista geral (ou seja, se estamos exibindo 100 objetos por página, em seguida, getListIndex () retorna "0" no topo da página 2, não "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();
}

É possível no decorador mesa de alguma forma obter o número da linha que reflete o deslocamento correto? Displaytag é ciente do em algum lugar compensado, já que usa-lo para formatar os links de paginação.

Os docs displaytag não abordar esta questão, e os US $ {row_rowNum} objeto implícito funciona de forma idêntica a getListIndex () no decorador.

Sim, é possível fazer isso adicionando uma coluna de linha-número para o SQL paginado e ter o uso TableDecorator que, se disponível, mas eu prefiro não contar com o DAO para esse tipo de metadados. O seguinte método TableDecorator tira vantagem de uma coluna rownum se ele existir, caso contrário, utiliza 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();
}

Graças.

/ mcr

Foi útil?

Solução

Você deve ser capaz de calcular o valor correto índice geral referenciando o número da página que está no pedido.

Código algo assim sua classe TableDecorator deve funcionar:

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

   return ((page - 1) * numItemsPerPage) + index + 1;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top