こんにちは、もう 1 つの退屈な質問に戻ってきました。
テーブルをページネーションしようとしています。テーブルには 12 人のユーザーがいます。これが私のコントローラー機能です
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 にはオフセットと最大値が表示されます。この表では、1 ページに 10 個、もう 1 ページに 2 個表示するのではなく、12 個すべてを表示するだけです。2 ページ番号が表示されるので、1 ページに 10 個しか表示されないことが想定されていることがわかります。テーブル自体でそれを行っていないだけです。パラメータの受け渡しなどに何らかの問題があると想定しています。
提案/意見/ヘルプは大歓迎です!