Domanda

Sto usando cercapersone esterno / smistamento con una TableDecorator personalizzato e la seguente tabella DisplayTag in una 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> 

Nel decoratore tavolo, getListIndex () restituisce il numero di riga relativo solo alla pagina corrente, non alla lista complessiva (vale a dire, se stiamo visualizzazione di 100 oggetti per pagina, poi getListIndex () restituisce "0" al Inizio pagina 2, 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();
}

E 'possibile nella tabella decoratore per ottenere in qualche modo il numero di riga che riflette l'offset corretto? Displaytag è a conoscenza del da qualche parte offset, come si usa per formattare i link di paginazione.

La documentazione displaytag non affrontano questa domanda, e il $ {} row_rowNum oggetto implicita funziona in modo identico a getListIndex () nella decoratore.

Sì, è possibile fare questo con l'aggiunta di una colonna row-numero al SQL impaginato e avere la TableDecorator uso che se disponibili, ma preferisco non fare affidamento sulla DAO per questo tipo di metadati. Il seguente metodo TableDecorator sfrutta una colonna rownum se esiste, altrimenti esso utilizza 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();
}

Grazie.

/ MCR

È stato utile?

Soluzione

Si dovrebbe essere in grado di calcolare il valore di indice generale corretto facendo riferimento al numero di pagina che è nella richiesta.

Codice qualcosa come questo la classe TableDecorator dovrebbe funzionare:

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

   return ((page - 1) * numItemsPerPage) + index + 1;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top