Question

J'utilise la pagination externe / tri avec un TableDecorator personnalisé et la table displaytag suivante dans une page 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 décorateur de table, getListIndex () retourne le numéro de ligne relatif uniquement à la page en cours, pas sur la liste générale (par exemple, si nous affichons 100 objets par page, puis retourne getListIndex () « 0 » au haut de la page 2, et non "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 décorateur de table pour obtenir en quelque sorte le numéro de ligne qui reflète le décalage correct? Displaytag est au courant de l'endroit décalé, comme il l'utilise pour formater les liens de pagination.

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

Oui, il est possible de le faire en ajoutant une colonne numéro de ligne à la paginé SQL et ayant la TableDecorator utilise que si elle est disponible, mais je préfère ne pas compter sur le DAO pour ce genre de métadonnées. La méthode de TableDecorator suivante profite d'une colonne de rownum 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();
}

Merci.

/ mcr

Était-ce utile?

La solution

Vous devriez être en mesure de calculer la valeur de l'indice global correct en faisant référence au numéro de page qui est dans la demande.

code quelque chose comme votre classe TableDecorator devrait fonctionner:

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

   return ((page - 1) * numItemsPerPage) + index + 1;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top