分页不在 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…"/></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)
}
}
我有分页问题,我使用 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…"/></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)
}
}