मुझे पता है कि यह सवाल बहुत पुराना है, लेकिन मैंने अभी इस पर काम किया है, इसलिए मुझे लगा कि मैं भविष्य के लिए अपना समाधान साझा करूंगा।
हम 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);
}
यह है कि।
इस प्रश्न के लिए कोई इनपुट? – user1234
@ बालससी इस पर कोई मदद? – user1234