我希望在分页中显示特定类别下的所有游戏(10 /页) 这是我的控制器
def listGame(){
def category = GameCategory.list()
def platform = Platform.list()
def currentCategory = params.categoryName
def myCategory=GameCategory.findByCategoryName(currentCategory)
def games = myCategory.games
[currentCategory:currentCategory, category:category, games:games, platforms:platform, gameCount:Game.count(), chosenPlatform:params.platform]
}
这是我视图中的分页代码
<g:each in="${games}" status="i" var="game">
${game.gameTitle}
</g:each>
<div class="pagination">
<g:paginate action="listGame" total="${gameCount}" />
</div>
当我在当前类别中有9个游戏时,第12页显示其中不应该
答案 0 :(得分:1)
有几件事需要解决。
categoryName
未以null
进入控制器。max
和offset
参数来选择合适的Game
。因为分页器正在创建调用控制器的URL,并且您的控制器需要类别名称,所以分页器必须将类别名称添加到它调用控制器操作的参数。您可以使用代码params
属性
<g:paginate action="listGame" total="${gameCount}" params="${[categoryName: currentCategory]}"/>
控制器需要使用max
和offset
参数来了解要从数据库中检索并在视图中呈现的Game
的哪个子集。但是,在某些情况下,例如访问网址http://blah/someController/listGame时,不会有max
和offset
参数。这是您的控制器操作必须能够处理的事情。它是这样的:
def max = params.max ?: 10
def offset = params.offset ?: 0
因此,如果max
和offset
参数可用,则会使用它们。否则他们将使用默认值。
最后,您需要使用这些参数来选择Game
。为此,您可以使用 where 查询:
def games = Game.where {
categories.categoryName == currentCategory
}.list(max: max, offset: offset)
有关返回的games
对象的一些有趣内容:它就像一个列表,但它实际上是grails.gorm.PagedResultList
。这是一件好事,因为它包含结果中总的记录数(忽略最大值和偏移量)。换句话说,它是您的新gameCount
。
您可以在Grails文档中阅读有关where查询的更多信息。我还有一系列articles,它们更详细地介绍了where,criteria和HQL查询。
总而言之,listGame()
看起来像这样:
def listGame(){
def category = GameCategory.list()
def platform = Platform.list()
def currentCategory = params.categoryName
def max = params.max ?: 10
def offset = params.offset ?: 0
def games = Game.where {
categories.categoryName == currentCategory
}.list(max: max, offset: offset)
[currentCategory:currentCategory, category:category, games:games, platforms:platform, gameCount:games.totalCount, chosenPlatform:params.platform]
}
答案 1 :(得分:0)
看起来你还没完成你的作业。请仔细阅读grails doc和其他教程,了解分页的工作原理。
只是给你一个提示。你在这里犯了两件事。