عرض الترحيل الخارجي / الفرز الخارجي والحصول على رقم الصف الحقيقي

StackOverflow https://stackoverflow.com/questions/965198

سؤال

أنا أستخدم الترحيل الخارجي / الفرز مع مخصص TableDecorator وجدول العرض التالي في 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> 

في Table Decorator، يقوم GetListindEx () بإرجاع رقم الصف النسبي فقط إلى الصفحة الحالية، وليس إلى القائمة العام (أي، إذا كنا نعرض 100 كائنات لكل صفحة، ثم إرجاع GetListIndEx () "0" في الجزء العلوي من الصفحة 2، وليس "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();
}

هل من الممكن في Decorator Decorator إلى حد ما، احصل على رقم الصف الذي يعكس الإزاحة الصحيحة؟ displaytag. يكون أدرك الإزاحة في مكان ما، حيث تستخدمه لتنسيق روابط الصفحات.

لا يعالج مستندات DisplayTag هذا السؤال، ويعمل الكائنات الضمنية $ {row_rownum} بشكل متطابق على GetListIndex () في Decorator.

نعم، من الممكن القيام بذلك عن طريق إضافة عمود رقم التصفيات إلى SQL المعالج وبعد استخدام TableDecorator أنه إذا كان ذلك متاحا، لكنني أفضل عدم الاعتماد على DAO لهذا النوع من البيانات الوصفية. تستفيد طريقة TableDecorator التالية من عمود Rownum إذا كان موجودا، وإلا فإنه يستخدم GetListindIndex ():

/**
 * 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();
}

شكرا.

/ mcr.

هل كانت مفيدة؟

المحلول

يجب أن تكون قادرا على حساب قيمة الفهرس الشاملة الصحيحة من خلال الرجوع إلى رقم الصفحة الذي هو في الطلب.

رمز شيء مثل هذا TableDecorator يجب أن تعمل الطبقة:

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

   return ((page - 1) * numItemsPerPage) + index + 1;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top