gpt4 book ai didi

Grails 分页

转载 作者:行者123 更新时间:2023-12-02 07:03:33 27 4
gpt4 key购买 nike

你好,我又来问一个乏味的问题了!

试图让我的表格分页。表中有 12 个用户。这是我的 Controller 功能

    def listDuplicates(params) {
def result = User.getAllWithDuplicateIDs()
def totalDupCount = result.size()

/*sout for troubleshooting */
System.out.println("Duplicate:" + result.ID + " " + result.username)

params.max = Math.min(params.max ? params.int('max') : 10, 100)
return [resultList: result, totalDupCount: totalDupCount, params:params ]

}

这是我的看法

        <div>
<fieldset class="warningFieldSet">
<h1 style="color: red" align="center">
<g:message code="Duplicate IDs" />

</h1>
<p style="color: red; margin-left: 20px;">Duplicate IDs Found!</p>
<table>
<thead>
<tr>

<g:sortableColumn property="Username" title="Username" />
<g:sortableColumn property="ID" title="ID" />
<g:sortableColumn property="Status" title="Status" />
</tr>
</thead>

<tbody>
<g:each in="${resultList}" status="i" var="resultDuplicate">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td>
${resultDuplicate.username}
</td>

<td style="color: red; font-weight: bold">
${resultDuplicate.id}
</td>

<td>
${resultDuplicate.accountStatus }

</tr>
</g:each>
</tbody>
<tfoot>
<g:if test="${totalDupCount >10 }">
<div class="paginateButtons">
<g:paginate action= "listDuplicates" total="${totalDupCount}" />
</div>
</g:if>
</tfoot>
</table>

</fieldset>

</div>

用于查找重复 ID 的域函数

  static List<User> getAllWithDuplicateIDs() {

findAll("FROM User WHERE id IN (SELECT id FROM User group by id having count(*) > 1) AND id != '' ", [])

}

按钮出现。并且在 URL 中显示了偏移量和最大值。该表只显示所有 12 个,而不是一页上显示 10 个,另一页显示 2 个。 2 页码显示出来,所以它知道它只假设每页只显示 10 个。它只是不在表本身中这样做。我假设它在传递参数等方面存在某种问题。

非常感谢任何建议/意见/帮助!

最佳答案

Grails 分页基于两个参数:maxoffsetmax 确定页面大小,offset 确定当前页面的起始位置。 Controller 接收这些参数并通常将它们传递给数据库查询。 grails 添加到域对象的 list 方法处理这些参数,finder 方法采用 queryParams。通常的模式是将 params 对象直接传递给 list 或作为 queryParams 参数传递给查找器。这将返回一个从给定偏移量开始的结果集,一页长度。

在您的示例中,您在调用 getAllWithDuplicateIDs 时并未使用这些参数。更新您的查询以获取它们,如下所示:

static List<User> getAllWithDuplicateIDs(params) {
findAll("FROM User WHERE id IN (SELECT id FROM User group by id having count(*) > 1) AND id != '' ", [], params)
}

或者,将其分页到内存中,类似

results = results.drop(params.offset).take(params.max)

直接在查询中分页是可取的,因为它会更好地处理整个列表不适合内存的情况。

关于Grails 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com