如何管理grails中多个表的分页?

2024-02-22

我的 gsp 页面中有两个表(部分),我需要在它们上实现分页。表/节的每页中的记录数不同(例如,第一个表应每页显示 10 条记录,第二个表/节应每页显示 7 条记录)。我使用标签来实现它。当我这样做时,我遇到了很多问题,如下所述。

  1. 最初,它显示每个表给定的记录数。但是,当我单击一页中的“下一步”按钮时,整个页面都会刷新,两个表都会转到第 2 页,依此类推。当一页中的所有页面都完成后,在另一个表中单击“下一步”,它会显示页数较少的表显示空白页,下一个表显示新页面。例如:如果表 1 有 5 页,表 2 有 9 页,当我们转到第二个表的第 6 页时,第一个表显示为空白。

  2. 有时,当我单击“下一步”按钮时,显示的记录数不一致。例如。有时每页显示 10 条记录,下次像这样显示 5 条记录。两个表都会发生这种情况。

  3. 这是对控制器方法的正常调用,而不是 ajax 调用。您能给我 ajax 调用的示例吗?

任何人都可以帮助我解决这些问题吗?如果有人能给我用于多分页实现的控制器和 gsp 页面的代码,我将非常感激。

提前致谢。


首先假设您有以下课程。

LANGUAGE

class Language {

    String name

    static constraints = {}
}

PERSON

class Person {
 String name

 static constraints = {}
}

首先我们需要定义是否要使用 AJAX。这是为什么?因为使用静态页面时,您需要将两个分页的参数传递给控制器​​操作或从控制器操作传递参数。使用 AJAX 时,拥有两个不同的操作会更有用,因此您不必将所有参数传递给操作。

对于本示例,我们将采用更简单的 AJAX 路径。

首先,我们需要确定分页标签需要哪些数据。

  • Total:标签需要此一项
  • action:由于我们将有 2 个不同的操作,因此我们需要指定标签将使用哪个操作
  • 控制器:如果您在不同的控制器中生成列表
  • offset:页面的偏移量
  • max:页面中的最大元素数

现在假设我们要将这两个操作放在一个名为 main 的控制器中。

class MainController {

    /**The action that will load the list of people*/
    def personaList(){

        params.max = params?.max ?: 10
        params.offset = params?.offset ?: 0
        def personList = Person.list(params)

        render template: 'personaList',
        model: [
            personList : personList,
            personTotal: Person.count,
            max: params.max,
            offset: params.offset
        ]
    }


    /**The action that will load the list of languages*/
    def languageList(){

        params.max = params?.max ?: 10
        params.offset = params?.offset ?: 0
        def languageList = Language.list(params)

        render template: 'languageList',
                model: [
                        languageList : languageList,
                        languageTotal: Language.count,
                        max: params.max,
                        offset: params.offset
                ]
    }
}

既然我们要使用 ajax 那么我们应该使用模板渲染。我们将创建一个模板来呈现每个动作

语言模板_语言列表

<table>
    <thead>
    <tr><th>Name</th></tr>
    </thead>
    <tbody>
    <g:each in="${languageList}" var="language">
        <tr>
            <td>${language.name}</td>
        </tr>
    </g:each>
    </tbody>
</table>

<div class="paginate">
    <g:paginate total="${languageTotal ?: fraglist.Language.count}" 
               controller="main" action="languageList"
               max="${max ?: 10}" offset="${offset ?: 0}" />
</div>

角色模板_personList

<table>
    <thead>
        <tr><th>Name</th></tr>
    </thead>
    <tbody>
        <g:each in="${personList}" var="person">
            <tr>
                <td>${person.name}</td>
            </tr>
        </g:each>
    </tbody>
</table>

<div class="paginate">
    <g:paginate total="${personTotal ?: fraglist.Person.count}" controller="main" action="personaList"
                max="${max ?: 10}" offset="${offset ?: 0}" />
</div>

最后,我们认为我们需要添加一点 jquery。 jquery 函数将单击事件处理程序添加到由 paginate 标记创建的所有链接。对于每个表的默认情况,我们使用 include 标签。我们还定义了两个元素,每个列表将在其中加载其新内容。

<!DOCTYPE html>
<html>
    <head>
        <meta name="layout" content="main"/>
        <title>Welcome to Grails</title>
    </head>
    <body>

        <div id="table-person" class="table-container">
            <g:include controller="main" action="personaList" />
        </div>

        <div id="table-language" class="table-container">
            <g:include controller="main" action="languageList" />
        </div>


        <script>
            (function($){
                $(document).ready(function(){
                    $(".table-container").on('click', '.paginate a', function(event){
                        event.preventDefault();
                        var linkItem  =  $(this);
                        var target = linkItem.closest('div.table-container');
                        $.get(linkItem.prop('href'))
                                .done(function(data){
                                    target.html(data);
                                }).fail(function(){
                                    alert("There was an error loading the data");
                                });
                    });
                });
            })(jQuery)
        </script>
    </body>
</html>

这是我能想到的最简单的示例,您可以在同一视图中拥有两个 ajax 分页列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何管理grails中多个表的分页? 的相关文章

随机推荐

  • QLDB 中的分页

    我注意到 QLDB 不支持LIMIT or SKIP实现基本分页所需的查询参数 将来是否会支持此功能 或者是否有其他方法在 QLDB 中实现分页 目前不支持 LIMIT SKIP QLDB 专为数据摄取而构建 我们建议在另一个专门构建的数据
  • 最佳 MySQL 配置 (my.cnf)

    以下是我的默认生产MySQL配置文件 my cnf 用于以 InnoDB 作为默认存储引擎的纯 UTF 8 设置 server bind address 127 0 0 1 innodb file per table default cha
  • 在 PHP 中使用另一个条件的变量

    我有这个代码 if isset GET act display gt display templates install main html if isset POST proceed prefix POST prefix if GET a
  • 使用@Transactional和Spring模板有什么区别?

    如果我在 DAO 中使用 Transactional 我的所有 EntityManager 查询是否都会通过提交和关闭进行封装 或者我需要使用Spring模板 JPA模板 Hibernate模板 使用 Transactional和Sprin
  • 使用 Genymotion 和 Charles 进行 SSL 代理?

    我正在尝试让 Genymotion Virtualbox 中托管的 x86 Android 模拟器 与 Charles 代理一起使用 我已成功使用网关 ip 虚拟机配置为使用仅主机适配器 fwiw 将设备连接到设备 wifi 代理设置中的代
  • 从 Excel 单元格读取十进制值(在 C# 中)

    从包含小数的 Excel 单元格读取值时 我遇到以下问题 如果我在 Excel 的单元格中输入 9 95 CellValue InnerText在 C 中返回 9 9499999999999993 我怎样才能获得输入的实际值 即 9 95
  • 使用 geotools api 在 WGS84 crs 中线段和点之间的最短距离

    在geotools中 您可以使用Geometry类中的距离函数找到两个几何图形之间的距离 几何有一个点子类 但没有几何的线段子类 然而 有一个 LineSegment 类派生自 LineString 它不是 Geometry 类的子类 我尝
  • JAX-RS 非常适合实现 REST。在 Java 中使用什么来调用 REST 服务? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 理想情况下 我正在寻找类似 JAX RS 的东西 使用注释来描述我想要调用的服务 但允许调用使用其他技术 不是 JAX RS 实现的 RE
  • javascript(类java)哈希码实现

    以下代码是我对相当通用的 javascript 哈希代码实现的尝试 我计划将此代码与哈希表实现 例如 jshashtable 结合使用 该哈希表实现使用 hashCode 如果为键定义 我尝试严格遵守 java 的数字 字符串和数组的哈希码
  • 何时/为何在 for 循环上使用 map/reduce

    我第一次接触 JavaScript 中的对象操作 我有一个问题 想知道是否有人可以回答 当我想要操作一个对象时 我可以在一些嵌套的 for 循环范围内执行某些操作 但是 JavaScript 中内置了一些函数 例如 map reduce f
  • 在 Wildfly 上激活 JaxbAnnotationModule

    我正在尝试在 Wildfly 8 上设置一个 REST 服务 该服务返回带有自定义枚举值的 JSON 我知道 Wildfy 使用 Jackson 2 3 进行连载 我还知道 当使用 Jackson ObjectMapper 注册 JaxbA
  • leiningen: 缺少超级 pom

    如果我启用 clojure couchdb 或 swank clojure 那么lein deps失败 因为 org apache maven super pom jar 2 0 丢失 dependencies org clojure cl
  • 为什么我的自定义 `::swap` 函数没有被调用?

    这里我写一个代码片段看看是哪个swap会被调用 但结果都不是 什么也没有输出 include
  • iOS,我应该在项目中设置什么体系结构设置?

    对我的应用程序进行一些细微修改并将其加载到最新的 xcode 版本后 我注意到以下设置 我应该删除armv6吗 下拉菜单中的选项显示armv7 armv7s 我应该设置什么 如果你真的不想支持 iPhone3G和更低 不3GS 然后你可以删
  • 在 ios 9.1 中使用什么来代替 UIScreen.mainScreen().applicationFrame 进行 swift ?

    这可能是一个简单的问题 但由于我是初学者 最好问一下 正如标题所说 我应该使用什么来代替UIScreen mainScreen applicationFrame因为它在 9 0 中已被弃用 如果可能的话 如果你能给我提供一个样本或例子 那就
  • 有没有办法用茉莉花验证间谍执行的顺序?

    我有两个对象已被 Jasmine 设置为间谍 spyOn obj spy1 spyOn obj spy2 我需要验证调用spy1在致电之前来spy2 我可以检查它们是否都被调用 expect obj spy1 toHaveBeenCalle
  • 如何使用Java在线下载mp3文件?

    我使用以下方法下载 mp3 文件 http online1 tingclass com lesson shi0529 43 32 mp3 http online1 tingclass com lesson shi0529 43 32 mp3
  • 如何在x86汇编的数据段中写入常量

    我正在编写一个汇编程序 使用 icc 作为汇编器 我需要在数据部分编写一些常量 以便在主程序中进行相对加载 例如以下指令 vmovdqu msg rip ymm0 我现在将数据部分写成这样 data msg 0x00000000 0x010
  • 使用 Swift 将字符串转换为 Int

    该应用程序基本上通过输入初始速度和最终速度以及时间来计算加速度 然后使用公式来计算加速度 但是 由于文本框中的值是字符串 因此我无法将它们转换为整数 IBOutlet var txtBox1 UITextField IBOutlet var
  • 如何管理grails中多个表的分页?

    我的 gsp 页面中有两个表 部分 我需要在它们上实现分页 表 节的每页中的记录数不同 例如 第一个表应每页显示 10 条记录 第二个表 节应每页显示 7 条记录 我使用标签来实现它 当我这样做时 我遇到了很多问题 如下所述 最初 它显示每