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
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de calculer la bonne valeur globale de l'indice en mentionnant le numéro de la page qui est dans la demande.
Code à quelque chose comme ceci à votre
TableDecorator
classe devrait fonctionner:La seule façon que je pouvais penser de le faire est d'accéder à la PaginatedList de la demande. Peut-être créer une autre demande param qui stocke le nom de votre PaginatedList objet?? Le nouveau param pourrait être défini de façon dynamique dans votre classe de servlet.
Merci encore. BTW, je pense que la formule devrait être: "return ((page - 1) * numItemsPerPage) + index + 1;"
Vous êtes les bienvenus. J'ai mis à jour la formule que vous avez correctement décrits.
OriginalL'auteur Marcus Leon