分页不在 grails 中

Paginate doesn't word in grails

我有分页问题,​​我使用 grails 2.4.4

这是我的 index.gsp:

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title></title>
</head>

<body>
<div>
    <g:paginate controller="user" action="index" total="${userTotal}"/>
</div>
</body>
</html>

这是我的控制器:

class UserController {
    def index() {
        List<User> users = User.findAll()
    
        render(view: "index", model: [users: users, userTotal: 4])
    }
}

在控制台中我没有任何错误,在我的页面中我什么也看不到。 array users 不为空,我检查了。

render(view: "index", model: [users: users, userTotal: 4])

您已将 userTotal 硬编码为 4。paginate 标签默认为每页 10 个项目,因此不需要分页。

如果您担心分页,那么 User.findAll() 可能不是一个好主意,因为它会 return 所有数据。

默认脚手架会做这样的事情,这是一个更好的主意...

控制器动作:

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    respond userService.list(params), model:[userCount: userService.count()]
}

GORM 数据服务:

import grails.gorm.services.Service

@Service(User)
interface UserService {

    User get(Serializable id)

    List<User> list(Map args)

    Long count()

    void delete(Serializable id)

    User save(User user)

}

相关普惠制:

<!DOCTYPE html>
<html>
    <head>
        <meta name="layout" content="main" />
        <g:set var="entityName" value="${message(code: 'user.label', default: 'User')}" />
        <title><g:message code="default.list.label" args="[entityName]" /></title>
    </head>
    <body>
        <a href="#list-user" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></a>
        <div class="nav" role="navigation">
            <ul>
                <li><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a></li>
                <li><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>
            </ul>
        </div>
        <div id="list-user" class="content scaffold-list" role="main">
            <h1><g:message code="default.list.label" args="[entityName]" /></h1>
            <g:if test="${flash.message}">
                <div class="message" role="status">${flash.message}</div>
            </g:if>
            <f:table collection="${userList}" />

            <div class="pagination">
                <g:paginate total="${userCount ?: 0}" />
            </div>
        </div>
    </body>
</html>

如果您真的不想使用某项服务(强烈建议您这样做),那么您可以更改控制器以执行类似这样的操作...

params.max = Math.min(max ?: 10, 100)
respond User.list(params), model:[userCount: User.count()]

这是我的解决方案:

gsp:

 <div class="content scaffold-list">
        <g:form controller="user" action="index">
            <label>Input user's name:</label>
    
            <div class="form-group">
                <g:textField name="userName"/>
    
                <g:submitButton name="search"/>
            </div>
    
    
            <g:each var="user" in="${users}">
                <p>User with name: ${user.name}</p>
            </g:each>
        </g:form>
    
        <div class="pagination">
            <g:paginate controller="user" action="index"
                        max="5" total="${userCount}"/>
        </div>
    </div>

控制器:

def index(String userName) {
    initUsersAndPokemons()

    PagedResultList users = fourthService.findUsersByName(
            userName,
            params.int('max', 5),
            params.int('offset', 0))

    [users: users, userCount: users.getTotalCount()]
}

服务:

PagedResultList findUsersByName(String userName, int max, int offset) {
    BuildableCriteria bc = User.createCriteria()
    bc.list(max: max, offset: offset) {
            like('name',userName)
        }
    }