2011-09-12 12 views
10

जेएसएफ 2.0 ऐप में पेजिनेशन करने का सबसे प्रभावी तरीका क्या है? मैं प्राइमफेस डेटाटेबल का उपयोग करता हूं और यह बिना किसी कोडिंग के पेजिनेशन करने के लिए पर्याप्त बुद्धिमान है।कुशल जेएसएफ पेजिनेशन

<p:dataTable var="car" value="#{carBean.cars}" paginator="true" rows="10"> 
    <!-- Multiple columns here--> 
</p:dataTable> 

जो चीज़ मैं देखता हूं, वह है कि मुझे सत्र में अपने बीन को स्थानांतरित करने की आवश्यकता है या अधिक।

@ManagedBean 
@SessionScoped 
public class CarBean{ 
    public List<Car> getCars(){ 
     //return data from DB 
    } 
} 

मैं जानना चाहता था कि इसे कैसे किया जाए इस पर एक और प्रभावी तरीका है?

मैंने बैकएंड पर ईजेबी/जेपीए का उपयोग किया। इसके बारे में अधिक जानने के लिए किसी भी लिंक या ट्यूटोरियल जानना चाहेंगे।

धन्यवाद।

उत्तर

18

आप केवल स्मृति जो ग्राहक वास्तव में देखने की आवश्यकता में पंक्तियों के क्रम में LazyDataModel उपयोग करने की आवश्यकता । See also the example in PrimeFaces showcase। यह डीबी स्तर पर अंकन करता है जो आप अंततः चाहते हैं।

रिचफेस ArrangableDataModel, here's the RichFaces showcase example के स्वाद में उसी तरह से समर्थन करता है।

+0

हाय बलुस, यह एक उत्कृष्ट सुझाव है। मैं इसका इस्तेमाल करूंगा। हालांकि, मुझे लगता है कि यह मॉडल प्राइमफेस विशिष्ट है। बस जानना चाहेंगे, अगर मैं केवल जेएसएफ डाटाटेबल का उपयोग कर रहा हूं, तो इस मामले में पेजिनेशन कैसे किया जाता है? अतिरिक्त प्रश्न के लिए खेद है, यह सिर्फ मेरी जिज्ञासा बढ़ाओ। मेरे पास एक ईजेबी/जेपीए है जो मेरे व्यापार तर्क को संभालता है। –

+0

आपको कुछ सहायक बीन में आवश्यक बॉयलरप्लेट कोड लिखना होगा। आप इस आलेख में कुछ किकऑफ उदाहरण/अंतर्दृष्टि प्राप्त कर सकते हैं: http://balusc.blogspot.com/2008/10/effective-datatable-paging-and-sorting.html (नोट: 3 वर्ष पुराना आलेख और जेएसएफ 1.2 लक्षित!) – BalusC

+0

@ बालुससी, वास्तव में। कुछ सहायक बीन में सभी बॉयलरप्लेट। जेएसएफ को इतना सामान्य क्यों होना चाहिए? और क्यों जेएसएफ अंतर्निहित डेटाटेबल घटक के अस्तित्व के 10 वर्षों के बाद 'LazyDataModel' की तरह कुछ नहीं है? –

1

मुझे पता चला है कि प्राइमफ़ेस डेटा तालिका की निर्मित पेजिनेशन सुविधा सबसे अच्छी सुविधाओं में से एक है और इसमें 30,000 से अधिक हाइबरनेट इकाइयों के साथ रिकॉर्डसेट लाने और कम प्रदर्शन होने के कारण रिकॉर्ड लोड की अच्छी मात्रा है। । इसका मतलब यह है कि सत्र में 30,000 इकाइयां होंगी, इसलिए मेरे पास web.xml में सर्वर पक्ष पर सत्र संग्रहीत करने में सहायता के लिए निम्न है।

<context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 

यह ViewState की इजाजत दी अनुरोध/प्रतिक्रिया आकार बहुत हालांकि सर्वर साइड स्मृति ऐसा करने से काफी ग्रस्त हो सकते हैं कम किया जा के आकार कम हो जाएगा।

कुछ जेएसएफ कार्यान्वयन में एक और संभावित विकल्प व्यूस्टैट या सत्र मेमोरी उपयोग के आकार को कम करने में मदद करने के लिए संपीड़न है। निम्न लिंक कई सूर्य आरआई और माईफैस जेएसएफ कॉन्फ़िगरेशन पैरामीटर का वर्णन करता है जिन्हें सेट किया जा सकता है, जिनमें से कुछ सत्र स्थिति के संपीड़न का विकल्प देते हैं। http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frweb_jsfengine.html

जहां तक ​​प्राइमफेस डेटाटेबल पेजिनेशन सुविधा काम करती है, तो सीधे स्रोत पर क्यों न जाएं? Primefaces, एक सब ओपन सोर्स प्रोजेक्ट के बाद है तो बस कोड को देखो और आप क्या सीख सकते हैं देखें: http://code.google.com/p/primefaces/source/browse/#svn%2Fprimefaces

0

महत्वपूर्ण नोट जो आप प्राइमफेस का उपयोग कर रहे हैं, के आधार पर महत्वपूर्ण नोट। 3.0.एम 2 (मुझे लगता है) से शुरू करना यदि आप पंक्ति चयन सुविधा का उपयोग करना चाहते हैं तो आपको चुनिंदाडेटा मॉडल लागू करना होगा। इससे बहुत सारे विरासत कोड टूट जाते हैं और इसके बारे में कई बिट्स थे। ऐसा करने के लिए

सबसे आसान बात इस तरह एक आंतरिक वर्ग बनाने के लिए है:

private MyDataModel dataModel = null; 

public MyDataModel getDataModel() { 
    if (dataModel != null) return dataModel; 
    dataModel = new MyDataModel(some list); 
    return dataModel; 
} 

public static class MyDataModel extends ListDataModel<SomeRecord> 
     implements SelectableDataModel<SomeRecord> { 

    MyDataModel(List<SomeRecord> source) { 
     super(source); 
    } 
etc. 

फिर मूल्यपी विशेषता: DataTable# {bean.dataModel} हो जाता है।

शुभकामनाएं।

2

एक उत्पादन ऐप में, हमने डीबी में 700000 रिकॉर्ड से निपटने के लिए आलसी डेटामैडल का उपयोग किया है। मैं एम 3 का उपयोग करने का सुझाव दूंगा जो आलसी डेटाटेबल मामलों पर फिक्स करता है।