Frage

Ich bin mit externem Paging / Sortieranlagen mit einem benutzerdefinierten TableDecorator und die folgende DisplayTag Tabelle in einer 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> 

In der Tabelle Dekorateur, getListIndex () gibt die Zeilennummer relativ nur auf die aktuelle Seite, nicht auf die Gesamtliste (dh wenn wir die Anzeige 100 Objekte pro Seite, dann getListIndex () gibt „0“ an dem Seitenanfang 2, nicht "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();
}

Ist es möglich, in der Tabelle Dekorateur irgendwie die Zeilennummer erhalten reflektiert die richtigen Offset? Displaytag ist sich der Offset irgendwo, da sie es verwendet die Paginierung Links zu formatieren.

Die displaytag docs diese Frage nicht befassen, und die $ {} row_rowNum implizites Objekt funktioniert identisch zu getListIndex () in der Dekorateur.

Ja, es ist möglich, dies zu tun durch eine Zeilennummer Spalte auf die paginierte SQL hinzufügen und mit dem TableDecorator verwenden, dass wenn verfügbar, aber ich mag lieber nicht für diese Art von Metadaten auf den DAO verlassen. Die folgenden TableDecorator Verfahren nutzen eine rownum Spalte, wenn vorhanden, sonst verwendet es 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();
}

Danke.

/ mcr

War es hilfreich?

Lösung

Sie sollten den korrekten Gesamtindexwert zu berechnen, indem er die Seitennummer verweisen, die in der Anfrage ist.

-Code so etwas wie dies Ihre TableDecorator Klasse sollte funktionieren:

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

   return ((page - 1) * numItemsPerPage) + index + 1;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top