有domain-class User, 如下:
class User{ Long id Long version String name String password String toString(){ return "{$name}" } def static constraints = { name(name:true) password(blank:false, password:true) } }
主键是ID,name可以重复。使用name查询。
grails在创建好domain-class之后使用grails generate-all user即可生成CRUD (Create/Read/Update/Delete)操作。我们查询可以使用list.gsp。只用做很小的改动即可。
1 新建search.gsp,与list.gsp同目录。内容如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="layout" content="main" /> <title>User Search</title> </head> <body> <div class="body"> <g:if test="${flash.message}"> <div class="message">${flash.message}</div> </g:if> <g:form action="doSearch" method="post"> <div class="dialog"> <p>Enter user name below:</p> <table class="userForm"> <tr class='prop'> <td valign='top' style='text-align:left;' width='20%'> <label for='name'>Name:</label> </td> <td valign='top' style='text-align:left;' width='80%'> <input id="name" type='text' name='name' value='${params.name}' /> </td> </tr> </table> </div> <div class="buttons"> <span class="formButton"> <input type="submit" value="Search"></input> </span> </div> </g:form> </div> </body> </html>
2 修改UseController.groovy
i 新增search和doSearch
def search = { } def doSearch = { if(params.name==''){ flash.message="请输入想查询的用户名!" redirect(action:search) }else{ flash.message = "查询结果如下:" redirect(action:'list',params:params) } }
ii 修改list部分
def list = { if(!params.max) params.max = 10 [ userInstanceList: User.list( params ) ] }
改为
def list = { if(!params.max)params.max=10 if(params.name){ return [count:User.countByName(params.name),userInstanceList:User.findAllByName(params.name,params)] } else{ return [count:User.count(),userInstanceList:User.list(params)] } }
3 再修改list.gsp的分页部分
<g:paginate total="${User.count}"/>
改为
<g:paginate total="${count}" params="${params}" />
OK,搞定