2015-10-16 16 views
6

मैं बनाना चाहते हैं, जावा कोड, एक कस्टम पृष्ठांकन में से कस्टम पृष्ठांकन एक सरणी सूचीसरणी सूची

import org.springframework.data.domain.Sort; 
import org.springframework.data.domain.PageRequest; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.PageImpl; 
import org.springframework.data.domain.Sort.Direction; 
...  

    int page = 0; 
    int count = 8; 
    String sortOrder = "desc"; 
    String sortBy = "id"; 

    Sort sort = new Sort(Direction.fromString(sortOrder), sortBy); 
    PageRequest pageable = new PageRequest(page, count, sort); 

    List<Impianto> impiantos = myService.findMyMethod(); // returned 30 objects 
    Page<Impianto> pageImpianto = new PageImpl<Impianto>(impiantos, pageable, impiantos.size()); 

स्क्रिप्ट के द्वारा ऊपर 8 तत्वों का एक पेज वापस नहीं करता है। क्यूं कर?

एनबी। सूची डीबी

से वापस नहीं आई है क्या आप मेरी मदद कर सकते हैं?

+3

क्या ढांचे का उपयोग कर रहे लागू किया? वेयर 'सॉर्ट', 'पेजरक्वेट' और 'पेज' कक्षाएं हैं? –

+0

@ Gaël यह वसंत है। [पेज] देखें (http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Page.html) और [पेजआईएमपीएल] (http: // डॉक्स। spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageImpl.html#PageImpl-java.util.List-org.springframework.data.domain.Pageable-long-)। –

+0

* "उपरोक्त स्क्रिप्ट 8 तत्वों का एक पृष्ठ नहीं लौटाती है" * ... 'getTotalElements()' वापसी क्या करती है? –

उत्तर

1

I इस कामकाज के साथ सोल्व किया गया।

import org.springframework.data.domain.Sort; 
    import org.springframework.data.domain.PageRequest; 
    import org.springframework.data.domain.Page; 
    import org.springframework.data.domain.PageImpl; 
    import org.springframework.data.domain.Sort.Direction; 
    ...  

     int page = 0; 
     int count = 8; 
     String sortOrder = "desc"; 
     String sortBy = "id"; 

     Sort sort = new Sort(Direction.fromString(sortOrder), sortBy); 
     PageRequest pageable = new PageRequest(page, count, sort); 

     List<Impianto> impiantos = myService.findMyMethod(); // returned 30 objects 
     int max = (count*(page+1)>impiantos.size())? impiantos.size(): count*(page+1); 

     Page<Impianto> pageImpianto = new PageImpl<Impianto>(impiantos.subList(page*count, max), pageable, impiantos.size()); 

और मैं एक नए कस्टम तुलनित्र वर्ग

import java.lang.reflect.Field; 
import java.util.Comparator; 
import java.util.Date; 

public class MyListComparator implements Comparator<Object> { 

    final String sortBy; 
    final String sortOrder; 

    public MyListComparator(String sortBy, String sortOrder) { 
     this.sortBy = sortBy; 
     this.sortOrder = sortOrder; 
    } 

    @Override 
    public int compare(Object o1, Object o2) { 

     try { 
      Field field1 = o1.getClass().getDeclaredField(sortBy); 
      Field field2 = o2.getClass().getDeclaredField(sortBy); 

      field1.setAccessible(true); // because the fields in Impianto entity has "private" 
      field2.setAccessible(true); 

      if(o1.getClass().getDeclaredField(sortBy).getType() == Long.class){ 
       Long d1 = (Long) field1.get(o1); 
       Long d2 = (Long) field2.get(o2); 
       return (sortOrder.toLowerCase().equals("asc"))? d1.compareTo(d2) : d2.compareTo(d1); 

      }else if(o1.getClass().getDeclaredField(sortBy).getType() == Date.class){ 
       Date d1 = (Date) field1.get(o1); 
       Date d2 = (Date) field2.get(o2); 
       return (sortOrder.toLowerCase().equals("asc"))? d1.compareTo(d2) : d2.compareTo(d1); 

      }else{ 
       String d1 = (String) field1.get(o1); 
       String d2 = (String) field2.get(o2); 
       return (sortOrder.toLowerCase().equals("asc"))? d1.compareTo(d2) : d2.compareTo(d1); 

      } 
     } catch (SecurityException e) { 
      throw new RuntimeException(e); 
     } catch (NoSuchFieldException e) { 
      throw new RuntimeException("Missing variable sortBy"); 
     }catch (ClassCastException e) { 
      throw new RuntimeException("sortBy is not found in class list"); 
     } catch (IllegalArgumentException e) { 
      //shoud not happen 
      throw new RuntimeException(e); 
     } catch (IllegalAccessException e) { 
      throw new RuntimeException(e); 
     } 
    } 


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