displaytag externe de pagination/le tri et la prise en vrai numéro de ligne

Je suis à l'extérieur de la pagination/tri avec un custom TableDecorator et suivants DisplayTag table dans une 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> 

Dans le tableau décorateur, getListIndex() retourne le numéro de ligne relative seulement à la page en cours, et non pas à l'ensemble de la liste (c'est à dire, si nous sommes d'affichage de 100 objets par page, puis getListIndex() renvoie "0" en haut de la page 2, pas de "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();
}

Est-il possible dans le tableau décorateur d'obtenir en quelque sorte le numéro de ligne reflétant le décalage correct? Displaytag est conscient du décalage quelque part, il l'utilise pour le format, la pagination des liens.

La displaytag docs ne pas répondre à cette question, et le ${row_rowNum} implicite de l'objet fonctionne de manière identique à getListIndex() dans le décorateur.

Oui, il est possible de le faire en ajoutant une ligne-numéro de colonne de la paginé SQL et avoir la TableDecorator utiliser que si disponibles, mais je préfère ne pas compter sur le DAO pour ce genre de métadonnées. La suite TableDecorator méthode tire parti d'un numéro de rangée de la colonne si elle existe, sinon il utilise 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();
}

Grâce.

/mcr

OriginalL'auteur Michael C. Rosenstein | 2009-06-08