2012-07-16 25 views
6

Tôi muốn thêm một số nội dung phân trang vào ứng dụng grails của tôi. Tôi có hành động danh sách và trong đó tôi đã làm điều này:Phân trang trong Grails

if(!params.max){ 
params.max = 3 
} 
    def query = Profile.where { 
     userType == "F" 
    } 
    def freelancers = query.list(sort:"firstName", max:params.max) 
    if(freelancers) { 
     def freelancersCount = query.count() 
     return[freelancer:freelancers, fCount:freelancersCount] 
    } else { 
     response.sendError(404) 
    } 

trong GSP tôi đã viết này:

<div id="paginate"> 
    <g:paginate controller="freelancers" action="list" total="${fCount}"/> 
</div> 

mọi thứ đều ok, một có 5 đối tượng trong db của tôi và tôi có thể thấy chỉ có 3 khi mở một trang gsp trong trình duyệt, nhưng khi tôi nhấp vào tiếp theo để mở đối tượng khác 2, tôi thấy cùng 3 cái. những gì là sai và những gì tôi phải làm gì?

Trả lời

8

Bạn cần phải vượt qua bù đắp vào cuộc gọi của bạn để list:

def freelancers = query.list(sort:"firstName", offset:params.offset, 
max:params.max) 
+1

cảm ơn bạn, nó hoạt động. nhưng tôi có thể sử dụng một số kiểu css cho thẻ g: paginate không? –

+1

@Jack: có, xem nguồn để kiểm tra các lớp học mà grails đặt trên html và sử dụng các lớp đó cho bộ chọn của bạn. (hoặc là hoặc hack trên main.css) –

1

1) Nếu bạn đang sử dụng Tiêu chuẩn truy vấn sau đó:

params.max = Math.min(max ?: 10, 100) 
Integer offset = params.offset as Integer ?: 0 
List userInstanceList = User.createCriteria().list(max:params.max,offset:offset) { 
      or { 
       ilike('name', "%${name}%") 
       ilike('email', "%${email}%") 
      } 
      order('dateCreated', 'desc') 
     } 

2) Nếu bạn đang sử dụng truy vấn GORM sau đó:

params.max = Math.min(max ?: 10, 100) 
Integer offset = params.offset as Integer ?: 0 
List<User> userList=User.list(max:params.max,offset:offset)