2016-03-22 16 views
0

Ben Bu yöntem searchString parametre kabul buListe zaten sağlanmışsa, sınıflandırma sayfalandırma nasıl kullanılır?

def searchInAllField(String searchString) { 

    Long companyId = sessionService.userProfile.companyId; 
    return Vendor.createCriteria().list(){ 

     eq("companyId", companyId); 
     if (searchString) { 
      or { 
       ilike("name", "%${searchString}%") 
       ilike("businessName", "%${searchString}%") 
       ilike("address", "%${searchString}%") 
       ilike("description", "%${searchString}%") 
       ilike("contactPerson", "%${searchString}%") 
       ilike("mobileNumber", "%${searchString}%") 
       ilike("officeNumber", "%${searchString}%") 
       ilike("email", "%${searchString}%") 
      } 
     } 
     order("businessName", "asc"); 

    } ?: []; 
} 

benzeyen bir yöntem var ve hepsi alanındaki değeri ile eşleşen olmadığını kontrol edin.

Bu yöntemin sonucu, görüntülenmesi ve sayfalara ayrılması gereken bir listedir. Listeye zaten sahip olduğumda nasıl bir derecelendirme notu verebilirim?

cevap

1

Sayfalandırmayı kullanmak için searchInAllField() yönteminizin max ve offset parametrelerini içermesi gerekir. searchInAllField() boyunca max ve offset geçmek ve modelinde toplam sayısı sağlamak gerekir aramaları

def searchInAllField(String searchString, int max, int offset) { 

    Long companyId = sessionService.userProfile.companyId; 
    return Vendor.createCriteria().list(max: max, offset: offset) { 

     eq("companyId", companyId); 
     if (searchString) { 
      or { 
       ilike("name", "%${searchString}%") 
       ilike("businessName", "%${searchString}%") 
       ilike("address", "%${searchString}%") 
       ilike("description", "%${searchString}%") 
       ilike("contactPerson", "%${searchString}%") 
       ilike("mobileNumber", "%${searchString}%") 
       ilike("officeNumber", "%${searchString}%") 
       ilike("email", "%${searchString}%") 
      } 
     } 
     order("businessName", "asc") 

    } 
} 

kontrol yöntemi:

def someControllerMethod() { 
    def vendors = whatever.searchInAllField(searchString, params.max, params.offset) 

    render(model: [vendors: vendors, totalVendors: vendors.totalCount]) 
} 

toplam sayısı bu durumda vendors.totalCount de önemlidir. g:paginate taglib'in doğru çalışması için buna ihtiyacı var.

Not: g:paginate belgeleri sizi yanlış yönlendirebilir. Toplam sayım olarak DomainClass.count() kullanımını gösterir. Ne istediğiniz sorgu sonucu veritabanı tablosundaki toplam kayıt sayısını saymaz. totalCount özelliği, gereksinim duyduğunuz her şeyi sağlar, ancak yalnızca sorgunuzu offset ve max ile yürüttüğünüzde özelliği alırsınız.

<g:paginate controller="someController" action="someControllerMethod" total="${totalVendors}" /> 
:

Son olarak, sayfalandırma bağlantıları işlemek için GSP kodunda g:paginate taglib kullanabilirsiniz

İlgili konular