Grails params.max返回一张地图

时间:2013-01-04 14:51:57

标签: grails pagination

我是grails的新手,刚刚开始开发应用程序。我想要做的第一件事是创建一个带有两个表的gsp,每个表都具有分页功能。通过研究,我发现有一个名为remotePagination的插件,它使用ajax来更新表格分页。我遇到的问题是'params.max'和'params.offset'值是两个字符串的映射而不仅仅是字符串值。在打开页面时,调用'list'闭包,并为max和offset设置正确的值,让我们说10.在第二次调用时,当调用ajax闭包时,max和offset值分别保存在map中如下:

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教程的示例应用程序。它并没有那么不同。我创建它只是为了看看插件在我将它集成到我的应用程序之前是否可行。

我想知道是否有其他人遇到过这个问题以及是否有解决方法。非常感谢。

1 个答案:

答案 0 :(得分: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']"