Pregunta

Estoy usando la megafonía externa / clasificación con un TableDecorator la costumbre y la siguiente tabla DisplayTag en un 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> 

En el decorador mesa, getListIndex () devuelve el número de fila única relativa a la página actual, no a la lista general (es decir, si estamos mostrando 100 objetos por página, a continuación, getListIndex () devuelve "0" en el la parte superior de la página 2, no "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();
}

¿Es posible en el decorador mesa para conseguir de alguna manera el número de fila que refleja el desplazamiento correcto? Displaytag es conscientes de algún lugar del desplazamiento, ya que lo utiliza para dar formato a los enlaces de paginación.

Los documentos displaytag no se aborda esta cuestión, y el $ {} row_rowNum objeto implícito funciona de forma idéntica a getListIndex () en el decorador.

Sí, es posible hacer esto mediante la adición de una columna de número de fila al SQL paginado y tener el uso TableDecorator que si está disponible, pero yo prefiero no confiar en la DAO para ese tipo de metadatos. El siguiente método TableDecorator se aprovecha de una columna rownum si existe, de lo contrario, 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();
}

Gracias.

/ mcr

¿Fue útil?

Solución

Usted debe ser capaz de calcular el valor del índice general correcta haciendo referencia al número de la página que se encuentra en la solicitud.

Código algo como esto a su clase TableDecorator debería 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top