2013-01-04 47 views
0

我是grails的新手,剛剛開始在工作中開發應用程序。我想要做的第一件事是創建一個帶兩個表的gsp,每個表都具有分頁功能。通過研究,我發現有一個名爲remotePagination的插件使用ajax來更新表格分頁。我遇到的問題是'params.max'和'params.offset'值是兩個字符串的映射,而不僅僅是一個字符串值。在打開頁面時,會調用'list'閉包,併爲max和offset設置正確的值,如10所示。在第二次調用時,當調用ajax閉包時,最大值和偏移值分別被保存在地圖中如下:Grails params.max返回地圖

params.max = [10,10] 
params.offset = [10,10] 

我使用的代碼如下:

控制器:

def list = { 
    params.max = Math.min(params.int('max') ?: 10, 100) 
    [bookInstanceList: Book.list(params), bookInstanceTotal: Book.count()] 
} 

def ajaxListBooks = { 
    params.max = Math.min(params.int('max') ?: 10, 100) 
    render(template: "bookList", model:[bookInstanceList: Book.list(params), bookInstanceTotal: Book.count()]) 
} 

的list.gsp

<%@ page import="com.intelligrape.Book" %> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta name="layout" content="main"/> 
    <g:set var="entityName" value="${message(code: 'book.label', default: 'Book')}"/> 
    <title><g:message code="default.list.label" args="[entityName]"/></title> 
    <g:javascript library="prototype"/> 
</head> 

<body> 
    <div class="nav"> 
    <span class="menuButton"><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a> 
    </span> 
    <span class="menuButton"><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]"/></g:link></span> 
    </div> 

    <div class="body"> 
    <h1><g:message code="default.list.label" args="[entityName]"/></h1> 
    <g:if test="${flash.message}"> 
     <div class="message">${flash.message}</div> 
    </g:if> 
    <div id="repoList"> 
      <g:render template="bookList"/> 
    </div> 
    </div> 
</body> 
</html> 

_listBooks.gsp

<%@ page import="com.nmi.uk.sw.subzero.Book" %> 

<div> 
    <table> 
    <thead> 
    <tr> 

     <util:remoteSortableColumn property="author" title="${message(code: 'book.author.label', default: 'Author')}" update="repoList" action="ajaxListBooks"/> 
     <util:remoteSortableColumn property="name" title="${message(code: 'book.name.label', default: 'Name')}" update="repoList" action="ajaxListBooks"/> 
     <util:remoteSortableColumn property="price" title="${message(code: 'book.price.label', default: 'Price')}" update="repoList" action="ajaxListBooks"/> 

    </tr> 
    </thead> 
    <tbody> 
    <g:each in="${bookInstanceList}" status="i" var="bookInstance"> 
     <tr class="${(i % 2) == 0 ? 'even' : 'odd'}"> 

      <td><g:link action="show" id="${bookInstance.id}">${fieldValue(bean: bookInstance, field: "author")}</g:link></td> 

      <td>${fieldValue(bean: bookInstance, field: "name")}</td> 

      <td>${fieldValue(bean: bookInstance, field: "price")}</td> 

     </tr> 
    </g:each> 
    </tbody> 
</table> 
<div class="paginateButtons"> 
    <util:remotePaginate total="${bookInstanceTotal}" update="repoList" 
             action="ajaxListBooks" 
             pageSizes="[10,20,30,40,50,60,70,80,90,100]" /> 
</div> 
</div> 

上面的代碼是基於爲remotePagination教程示例應用程序。它沒有那麼不同。我創建它只是爲了查看該插件是否會在將其集成到我的應用程序之前運行。

我想知道是否有其他人遇到過這個問題,以及是否有解決方案。非常感謝。

回答

0

在你_bookList.gsp,存在<util:remotePaginate標籤錯誤:

pageSizes="[10,20,30,40,50,60,70,80,90,100]" 

pageSizes應該是一個地圖,而不是一個列表,如:

pageSizes="[10:'10 Per Page', 20: '20 Per Page', 50:'50 Per Page',100:'100 Per Page']" 
+0

難道這是則params的原因。最大是一張地圖,而不是一個單一的值?我會糾正它並回復你。 – JCDubs

+0

只是糾正它,它並沒有阻止問題。 params.max和偏移量仍然是地圖。 – JCDubs

+0

[10,10]是一個列表,而不是一張地圖。你如何找到這個參數值? – coderLMN