2010-10-08 9 views
6

डिस्प्ले टैग में मैंने पेजिंग सुविधा का उपयोग किया, जब मैं 15 पंक्तियों की सूची देखना चाहता हूं लेकिन डेटाबेस से सभी पंक्तियों को टैग फीच प्रदर्शित करता हूं। हर बार जब मैं पेजिनेशन नंबर पर क्लिक करता हूं, तो यह db.bcoz से सभी पंक्तियों को आकर्षित करता है जिससे यह एप्लिकेशन के प्रदर्शन को धीमा कर देता है।प्रदर्शन टैग पेजिनेशन समस्या

मैं चाहता हूं कि जब मैं 15 पंक्तियों को देखना चाहता हूं तो डिस्प्ले टैग में टैग प्रदर्शित करें, डीबी से 15 पंक्तियों को पूरे डीबी पंक्तियों में नहीं लाएं। कृपया मुझे मदद करें अगर कोई जानता है।

उत्तर

10

आपको बाहरी पेजिनेशन सुविधा का उपयोग करना होगा। सबसे पहले, HTML टैग में निर्दिष्ट करें कि आप बाहरी पेजिनेशन का उपयोग कर रहे हैं। और एक ऑब्जेक्ट लागू करें org.displaytag.pagination.PaginatedList लागू करता है। अंत में, आपको डीएओ को लागू करना होगा जो वास्तव में केवल 15 पंक्तियों के लिए पूछताछ करता है और पेजिनेटेडलिस्ट लौटाता है।

1) अपने JSP की तरह इस

<display:table name="command" sort="external" partialList="true" size="${command.fullListSize}" pagesize="${command.objectsPerPage}"> 
    <display:column property="name" title="name"/> 
    ... 
</display:table> 

नोट यह निर्दिष्ट उस तरह बाहरी है दिखेगा।

2) org.displaytag.pagination.PaginatedList कार्यान्वयन।

public class PaginatedListImpl<T> implements PaginatedList{ 
    private int fullListSize; 
    private int objectsPerPage; 
    private int pageNumber; 
    private String searchId; 
    private String sortCriterion; 
    private SortOrderEnum sortDirection; 
    private List<T> list; 

//getters and setters 
... 
} 

3) हाइबरनेट का उपयोग करके डीएओ कार्यान्वयन नमूना। आप इसे जेडीबीसी या कुछ भी कर सकते हैं लेकिन यह सुनिश्चित कर लें कि आप उचित क्रम में 15 पंक्तियां प्राप्त करने और PaginatedListImpl ऑब्जेक्ट को वापस करने के लिए सही क्वेरी कर रहे हैं।

@SuppressWarnings("unchecked") 
public PaginatedListImpl<T> getPaginatedList(PaginatedListImpl paginatedList) { 
    int pageNum = paginatedList.getPageNumber(); 

    final int objectsPerPage = paginatedList.getObjectsPerPage(); 
    final int firstResult = objectsPerPage * pageNum; 
    String sortOrderCriterion = pagiantedList.getSortOrderCriterion(); 
    String sortOrder = paginatedList.getSortOrder 

    String className = type.getName().substring(type.getName().lastIndexOf(".") + 1); 
    final StringBuilder fromClause = new StringBuilder("from " + className + " " + alias); 
    String orderByClause = new StringBuilder(" order by ").append(sortCriterion).append(" ").append(sortDirection); 

    final String hql = new StringBuilder().append(fromClause).append(orderClause).toString(); 
    List<T> resultList = getHibernateTemplate().executeFind(new HibernateCallback() { 
    public Object doInHibernate(Session session) throws HibernateException, SQLException { 
    return session.createQuery(hql) 
     .setFirstResult(firstResult) 
     .setMaxResults(objectsPerPage) 
     .list(); 
    } 
    }); 
    Long count = (Long)getHibernateTemplate().execute(new HibernateCallback() {   
    public Object doInHibernate(Session session) throws HibernateException, SQLException { 
     return session.createQuery("select count(*) " + fromClause).uniqueResult(); 
    } 
    }); 
    paginatedList.setFullListSize(count.intValue()); 
    paginatedList.setList(resultList); 
    paginatedList.setPageNumber(pageNum+1); 
    paginatedList.setObjectsPerPage(objectsPerPage); 
    return paginatedList; 
} 
2

Displaytag भेजता है यह पृष्ठांकन और छँटाई डेटा पैरामीटर के साथ "डी" शुरू का उपयोग कर रहा है। तो त्वरित समाधान यह जांचने के लिए किया जा सकता है कि अनुरोध में "डी -" से शुरू होने वाला कुछ है, यदि हां तो फिर से अपनी क्वेरी निष्पादित न करें।

+0

यह कहां से जांचें? – Sayan

0

PaginatedList का उपयोग करने के किसी कारण से काम नहीं लग रहा था। मैंने नवीनतम संस्करण के साथ प्रयास किया और ऐसा लगता है कि कुछ बग है और यह त्रुटि attribute size must be specified देता है भले ही मैं आकार मान को हार्ड कोड करता हूं। मैं अन्य लिंक/ब्लॉग के माध्यम से चला गया और कई लोगों ने इसे इंगित किया है।

जिस विकल्प का मैंने अंततः उपयोग किया वह सत्र में डेटा को स्टोर करना है। जब उपयोगकर्ता अगला क्लिक करता है तो यह सत्र में डेटा की जांच करता है। यदि मौजूद है, तो यह सेवा परत को हिट नहीं करेगा। अभी तक यह ठीक काम किया है।

+0

ऐसा लगता है कि आप मूल पोस्टर हैं - शायद अब आप पंजीकृत हैं। यदि हां, तो क्या आप स्पष्टीकरण दे सकते हैं। यदि नहीं, तो कृपया "काम नहीं लग रहा" के बजाय "काम नहीं लग रहा है" कहने के लिए संपादित करें। – AndrewC

+0

यह हो सकता है कि आपकी परिणाम सूची शून्य हो। – Alex

संबंधित मुद्दे