2013-06-12 44 views
1

我想在grails中使用paginate標記,但它不工作。grails paginate不起作用

在控制器

def show(Integer max) { 
    params.max = Math.min(max ?: 10, 100) 
    def etpse 
    def total 

    if (params.data == 'all') { 

     etpse = Enterprise.findAll() 
     total = Enterprise.count() 
    } 

    else { 
     def paramsLike = "%" + params.data + "%" 
     etpse = Enterprise.findAllByKeywordLike(paramsLike) 
     total = Enterprise.countByKeywordLike(paramsLike) 
    } 

    [etpseList: etpse, instanceTotal: total] 
} 

在GSP:

<div id='pagination'> 
    <g:paginate total="${instanceTotal}" /> 
</div> 

回答

2

paginate標籤不過濾在你的頁面的結果,也沒有渲染的項目清單。它僅根據請求的參數爲下一頁/上一頁創建鏈接。

你的控制器負責獲取數據的正確的頁面,你的GSP負責呈現項目的實際列表。

paginate標籤參數被設計以匹配參數到GORM注射list方法,而且幾乎總是去手手:

class ItemController { 
    def list() { 
     [items: Item.list(params), itemCount: Item.count()] 
    } 
} 

視圖:

<g:each var="item" in="${items}"> 
    <!-- render items here --> 
</g:each> 

<g:paginate controller="item" action="list" total="${itemCount}"/> 

在上述代碼,所述PARAMS列表(包括像maxoffset)被傳遞到Item域類的list方法,而這將抓取數據的單個頁面。

的PAGINATE標籤檢驗爲同一條目的請求參數,確定哪一頁您正在查看和使用max和偏移正確的價值觀產生下一個和前幾頁的必要聯繫數據

+0

如果該類不是一個帶有列表方法的域類,該怎麼辦?這只是一個POGO?如何編寫這樣的列表方法? – johnsam

1

你要通過你的PARAMS max和偏移到您的findAll,否則Grails的不知道如何進行分頁的結果集。

例如,

Book.findAll(query, [max: 10, offset: 5])

2

在這裏你去。

def show(Integer max) { 

    Integer offset = params.int("offset") 
    Integer max = Math.min(params.int("max") ?: 10, 100) 

    if (params.data == 'all') { 
     params.data = '%'; 
    } 

    def c = Enterprise.createCriteria() 
    def results = c.list(max: max, offset: offset) { 
     ilike('keyword', "%" + params.data + "%") 
    } 


    [etpseList: results, instanceTotal: results.totalCount] 
}