20130516-Grails In Action-4、让模型工作(04小节)

来源:互联网 发布:python培训视频 编辑:程序博客网 时间:2024/05/16 12:37

动态查询和实体查询

1、实现一个简单的查询表单

首先,在/grails-app/views/user/新建一个search.gsp,建立一个查询表单

 1 <!DOCTYPE html> 2 <html> 3     <head> 4         <title>Search Hubbub</title> 5         <meta name="layout" content="main"/> 6     </head> 7      8     <body> 9         <formset>10             <legend>Search for Friends</legend>11             <g:form action="results">12                 <label for="userId">User Id</label>13                 <g:textField name="userId" />14                 <g:submitButton name="search" value="Search"/>15             </g:form>16         </formset>17     </body>18 </html>

这里有一些grails标签库的标记,后续会详细列出来

访问这个页面时,惯例会访问http://localhost:8080/hubbub/user/search打开这个页面,所以需要在UserController中增加访问方法。form表单提交给results这个action,在UserController中处理这个业务逻辑,现在定制UserController

 1 package com.grailsinaction 2  3 class UserController { 4  5     def scaffold = true 6      7     def search = { 8     } 9     10     def results = {11         /*基于页面参数,找到userId*/12         def users = User.findAllByUserIdLike(params.userId)13         return [ users: users, term : params.userId ]14     }15 }

这句def users = User.findAllByUserIdLike(params.userId)有点小毛病,如果信息是模糊查询,强制要求用户使用%%通配符,修改一下,看看Grails的魔法

def users = User.findAllByUserIdLike("%${params.userId}%")

现在已经将search表单提交给results闭包了,并且闭包已经获取到返回数据了,下一步就是将数据结果返回给用户

在/grails-app/views/user/新建一个results.gsp页面文件

 1 <!DOCTYPE html> 2 <html> 3     <head> 4         <title>Search Results</title> 5         <meta name="layout" content="main"/> 6     </head> 7      8     <body> 9         <h1>Results</h1>10         <p>Searched ${com.grailsinaction.User.count()} records11             for items matching <em>${term}</em>.12             Found <strong>${users.size()}</strong> hits.13         </p>14         15         <ul>16             <g:each var="user" in="${users}">17                 <li>${user.userId}</li>18             </g:each>19         </ul>20         <g:link action='search'>Search Again</g:link>21     </body>22 </html>
${users.size()}:统计命中的用户总数
<g:each var="user" in="${users}">:遍历UserController->results->users
<li>${user.userId}</li>: 显示用户账号
2、加点缺省数据到系统
修改conf/bootstarp.groovy
 1 import com.grailsinaction.Profile 2 import com.grailsinaction.User 3  4 class BootStrap { 5  6     def init = { servletContext -> 7         environments { 8             development { 9                 createAdminUserIfRequired()10             }11             test {12                 createAdminUserIfRequired()13             }14             production {15                 println "No special configuration required"16             }17         }18     }19     20     def destroy = {21     }22     23     void createAdminUserIfRequired() {24         if (User.count() == 0) {25             println "Fresh Database. Creating ADMIN user."26             def profile = new Profile(email: "admin@yourhost.com")27             def user = new User(userId: "admin", password: "secret", profile: profile).save()28         } else {29             println "Existing admin user, skipping creation"30         }31     }32 }

3、运行系统,访问http://localhost:8080/hubbub/user/search看效果吧。



原创粉丝点击