Grails远程分页正在刷新整个页面而不是div

Posted

技术标签:

【中文标题】Grails远程分页正在刷新整个页面而不是div【英文标题】:Grails remote-pagination is refreshing entire page instead of div 【发布时间】:2013-04-14 21:19:13 【问题描述】:

我在使用 grails 插件远程分页时遇到问题。我创建了一个新项目并复制粘贴了插件的示例代码。有一个书籍类,它有一个列表视图和一个表格模板。分页应该只更新 div 'filteredList' 中的数据,但页面只用布局视图_filtered.gsp 刷新。下面是代码:

控制器:

class BookController 
def scaffold = true

def list = 
    [bookInstanceList: Book.list(max:10,offset: 0), bookInstanceTotal: Book.count()]


def filter = 
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    render(template: 'filter', 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>
</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="filteredList">
        <g:render template="filter"/>
    </div>
</div>
</body>
</html> 

_filtered.gsp - 书目模板

    <div>
<div class="list">
<table>
    <thead>
    <tr>

        <util:remoteSortableColumn property="id" title="$message(code: 'book.id.label', default: 'Id')" update="filteredList" action="filter"/>

        <util:remoteSortableColumn property="author" title="$message(code: 'book.author.label', default: 'Author')" update="filteredList" action="filter"/>

        <util:remoteSortableColumn property="name" title="$message(code: 'book.name.label', default: 'Name')" update="filteredList" action="filter" max="5"/>

        <util:remoteSortableColumn property="price" title="$message(code: 'book.price.label', default: 'Price')" update="filteredList" action="filter"/>

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

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

            <td>$fieldValue(bean: bookInstance, field: "author")</td>

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

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

        </tr>
    </g:each>
    </tbody>
</table>
</div>
<div class="paginateButtons">
    <util:remotePaginate total="$bookInstanceTotal" update="filteredList"     action="filter" pageSizes="[5: '5 on Page',10:'10 on Page',15:'15 on Page']" max="5" />
</div>
</div>

【问题讨论】:

【参考方案1】:

我只需要在 list.gsp 页面的标题部分添加 javascript 库标记:

<g:javascript library="jquery" />

【讨论】:

嗯,它确实有效,但会破坏我对max 项目的选择。你有这个问题吗? 不,这对我来说不是问题。以上解决了我最初的问题。

以上是关于Grails远程分页正在刷新整个页面而不是div的主要内容,如果未能解决你的问题,请参考以下文章

Grails App中的双重分页问题

如何在 html 中刷新 <div> 而不是整个页面

嵌套页面,点击分页刷新导致的界面问题

在PHP中怎么实现新增数据,刷新表格,而不刷新整个页面。

通过Ajax实现无刷新分页

vue简单的下拉刷新分页(全部代码展示)