2011-10-11 16 views
7

मेरी परियोजना में मैं एक व्यूस्पेड बीन का उपयोग कर रहा हूं और मेरे पास दो पृष्ठ हैं जो मुख्य पृष्ठ है और अन्य विवरण पृष्ठ है।प्राइमफेस के क्रमबद्ध क्रम को कैसे बनाए रखा जाए?

मुख्य पृष्ठ में मेरे पास सॉर्टिंग और फ़िल्टरिंग कार्यक्षमता के साथ एक प्राइमफ़ेस है। डेटाटेबल में प्रत्येक पंक्ति में एक लिंक है। अगर मैं एक कॉलम सॉर्ट करता हूं, तो यह ठीक से काम करता है। यदि मैं मुख्य पृष्ठ में किसी लिंक पर क्लिक करता हूं, तो यह संबंधित पंक्ति के विवरण दिखाते हुए विवरण पृष्ठ पर जाएगा। विवरण पृष्ठ में मेरे पास बैक बटन है। यदि मैं उस पर क्लिक करता हूं, तो यह मुझे मुख्य पृष्ठ पर वापस ले जाएगा, लेकिन क्रमबद्ध क्रम में क्रमबद्ध नहीं किया गया है।

मुझे सॉर्ट ऑर्डर को बनाए रखने की आवश्यकता है। इसे कैसे प्राप्त किया जा सकता है?

+0

इस प्रश्न के लिए कोई इनपुट? – user1234

+0

@ बालससी इस पर कोई मदद? – user1234

उत्तर

8

मुझे पता है कि यह सवाल बहुत पुराना है, लेकिन मैंने अभी इस पर काम किया है, इसलिए मुझे लगा कि मैं भविष्य के लिए अपना समाधान साझा करूंगा।

हम PrimeFaces 3.5

यह केवल एक आलसी लोड हो रहा है मेज पर लागू किया गया था और एक में स्मृति मेज पर लागू नहीं प्रयोग कर रहे हैं। सबसे बड़ा अंतर जो अस्तित्व में हो सकता है, आपको कॉलम प्रकार (कक्षा) को इन-मेमोरी टेबल के लिए स्टोर करना होगा।

सबसे पहले, आपको किसी प्रकार का सत्र स्कोप्ड नियंत्रक चाहिए कि आप सॉर्ट स्टेटस को सहेज सकें। आपको दो राज्यों को स्टोर करने की आवश्यकता होगी: क्रमबद्ध कॉलम और सॉर्ट ऑर्डर (आरोही/अवरोही)।

दूसरा, पी को बाध्य करें: अपने व्यूस्पेड नियंत्रक (binding="#{viewController.datatable}") में किसी ऑब्जेक्ट को डेटाटेबल, और उसके लिए मूल गेटर और सेटर लागू करें। #{pojo.stuff}:

public void setDatatable(DataTable datatable) { 
    ExpressionFactory expressionFactory = ExpressionFactory.newInstance(); 
    ELContext elContext = FacesContext.getCurrentInstance().getELContext(); 
    if(!datatableInitialized) { 
     if(getSessionController().getSortState() == null) { 
      datatable.setValueExpression("sortBy", expressionFactory.createValueExpression(elContext, DEFAULT_SORT_COLUMN, Object.class)); 
      datatable.setSortOrder(DEFAULT_SORT_DIRECTION); 
     } else { 
      SortState state = getSessionController().getSortState(); 
      datatable.setValueExpression("sortBy", expressionFactory.createValueExpression(elContext, state.getValueExpression(), Object.class)); 
      datatable.setSortOrder(state.getDirection()); 
     } 
     datatableInitialized = true; 
    } 
    this.datatable = datatable; 
} 

महत्वपूर्ण बिट्स setValueExpression लाइनें हैं, createValueExpression विधि का दूसरा पैरामीटर JSF शैली अभिव्यक्ति, यानी की आवश्यकता है: सेटर विधि में, मैं इस किया है। यह भी ध्यान दें कि मैं ऑब्जेक्ट.क्लास को इस प्रकार के रूप में कैसे उपयोग कर रहा हूं, मुझे विश्वास है कि मैं इससे दूर हो सकता हूं क्योंकि तालिका आलसी लोड हो गई है और मैं LazyDataModel कार्यान्वयन में खुद को सॉर्ट कर रहा हूं।

तीसरा, datatable के लिए छँटाई घटना जोड़ें:

<p:ajax event="sort" listener="#{viewController.sortListener}" /> 

और नियंत्रक में श्रोता:

public void sortListener(SortEvent event) { 
    SortState state = new SortState(); 
    state.setValueExpression(event.getSortColumn().getValueExpression("sortBy").getExpressionString()); 
    state.setDirection(event.isAscending() ? "ascending" : "descending"); 
    getSessionController().setOpportunitiesSortState(state); 
} 

यह है कि।

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