Grails实战
一,搭建Grails环境
D:/_DEV/grails_apps>grails create-app demo
Welcome to Grails 1.0 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: D:/D/MY_DEV/grails-1.0 Base Directory: D:/_DEV/grails_apps Environment set to development Note: No plugin scripts found Running script D:/D/MY_DEV/grails-1.0/scripts/CreateApp.groovy ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/src ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/src/java ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/src/groovy ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/controllers ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/services ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/domain ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/taglib ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/utils ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/views ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/views/layouts ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/i18n ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/conf ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/test ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/test/unit ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/test/integration ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/scripts ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/js ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/css ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/images ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/WEB-INF/classes ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/META-INF ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/lib ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/conf/spring ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/grails-app/conf/hibernate [propertyfile] Creating new property file: D:/_DEV/grails_apps/demo/application.properties ???? [copy] Copying 2 files to D:/_DEV/grails_apps/demo ???? [copy] Copying 2 files to D:/_DEV/grails_apps/demo/web-app/WEB-INF ???? [copy] Copying 5 files to D:/_DEV/grails_apps/demo/web-app/WEB-INF/tld ???? [copy] Copying 87 files to D:/_DEV/grails_apps/demo/web-app ???? [copy] Copying 17 files to D:/_DEV/grails_apps/demo/grails-app ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo [propertyfile] Updating property file: D:/_DEV/grails_apps/demo/application.properties Created Grails Application at D:/_DEV/grails_apps/demo D:/_DEV/grails_apps> ?
通过“grails create-app”这个命令,Grails自动帮我们创建了开发所需的工程环境。其实您现在就已经拥有了一个可运行的Web应用程序,
然后进入demo目录(“cd demo”),输入“grails run-app”,回车,启动这个‘五脏俱全’的程序雏形,打开浏览器,输入 http://localhost:8080/demo ,回车,看到了吧 :) 让我们继续吧,请停止这个程序(Ctrl + C) 4,在“命令行”中输入“cd demo” ,回车, 以进入demo目录, 然后再输入“grails create-domain-class User”创建domain class即类似于pojo的pogo,它对应MVC中的Model,不过由Grails自动创建的pogo是空的,需要自己添加属性,约束(constraints)等。输出结果如下所示: ? D:/_DEV/grails_apps/demo>grails create-domain-class User
Welcome to Grails 1.0 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: D:/D/MY_DEV/grails-1.0 Base Directory: D:/_DEV/grails_apps/demo Environment set to development Note: No plugin scripts found Running script D:/D/MY_DEV/grails-1.0/scripts/CreateDomainClass.groovy ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo/grails-app/domain Created? for User ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo/test/integration Created Tests for User D:/_DEV/grails_apps/demo>
class
?User?{?
????String?name ????String?password ???? ????String?toString()?{ ???????? " $name?:?$password ???? ????} ???? ???? static ?constraints? = ?{ ????????name(blank:? false )???? ????????password(blank:? ,?size:? 6 .. 16 ) ????} }???? contraints这个类变量是定义一些约束的,比如name不能为空白,password不能为空白而且长度在6到16之间(包括6和16) D:/_DEV/grails_apps/demo>grails generate-all User
Welcome to Grails 1.0 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: D:/D/MY_DEV/grails-1.0 Base Directory: D:/_DEV/grails_apps/demo Environment set to development Note: No plugin scripts found Running script D:/D/MY_DEV/grails-1.0/scripts/GenerateAll.groovy ??? [mkdir] Created dir: D:/_DEV/grails_apps/demo/web-app/WEB-INF/lib ??? [mkdir] Created dir: C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/classes ? [groovyc] Compiling 7 source files to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/classes ??? [mkdir] Created dir: C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/resources/grails-app/i18n [native2ascii] Converting 10 files from D:/_DEV/grails_apps/demo/grails-app/i18n to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/re sources/grails-app/i18n ???? [copy] Copying 1 file to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/classes ???? [copy] Copying 1 file to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/resources ???? [copy] Copying 1 file to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo [0] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@2b2057: display name [org .codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@2b2057]; startup date [Tue Feb 05 23:26:45 CST 2008]; root of context hierarch y [16] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationConte xt@2b2057]: org.springframework.beans.factory.support.DefaultListableBeanFactory@eebf17 Generating views for domain class User ... Generating controller for domain class User ... Finished generation for domain class User D:/_DEV/grails_apps/demo>
????????????
?UserController?{ ????def?loginService? // ?新增的代码 ???? ????def?index? ?{?redirect(action:list,params:params)?} ???? ?the?delete,?save?and?update?actions?only?accept?POST?requests ????def?allowedMethods? ?[delete: ' POST ] ????def?list? ?{ ???????? if ( ! params.max)?params.max? =? 10 ????????[?userList:?User.list(?params?)?] ????} ????def?show? ?{ ????????def?user? ?User.get(?params.id?) ???????? user)?{ ????????????flash.message? User?not?found?with?id?${params.id} ????????????redirect(action:list) ????????} ???????? else ?{? return ?[?user?:?user?]?} ????} ????def?delete? ?User.get(?params.id?) ???????? (user)?{ ????????????user.delete() ????????????flash.message? User?${params.id}?deleted ?{ ????????????flash.message? ????????????redirect(action:list) ????????} ????} ????def?edit? ?{ ???????????? ?[?user?:?user?] ????????} ????} ????def?update? (user)?{ ????????????user.properties? ?params ???????????? user.hasErrors()? && ?user.save())?{ ????????????????flash.message? User?${params.id}?updated ????????????????redirect(action:show,id:user.id) ????????????} ???????????? ?{ ????????????????render(view: edit ????????????redirect(action:edit,id:params.id) ????????} ????} ????def?create? new ?User() ????????user.properties? ?params ???????? ?[ user :user] ????} ????def?save? ?User(params) ???????? ?user.save())?{ ????????????flash.message? User?${user.id}?created ????????????redirect(action:show,id:user.id) ????????} ???????? ?{ ????????????render(view: create ????def?login? ?(request.method? ==? )?{ ????????????User?u? ?User() ????????????u.properties? ?params ???? ???????????? ?( u.validate())?{ ????????????????render(view: login ?(params.name? ?params.password)?{ ???? ????????????????def?user? ?loginService.check(u) ???????????????? ???????????????? ?(user)?{ ??????????????????? flash.message? Welcome?${user.name} ? ??????????????????? render(view:? ok ?{ ??????????????????? flash.error? Invalid?${u.name}?with?${u.password} ??????????????????? render(view:? ?{ ????????????????render(view:? 8,在“命令行”中,输入“grails create-service Login”,创建LoginService.groovy,输出: D:/_DEV/grails_apps/demo>grails create-service Login
Welcome to Grails 1.0 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: D:/D/MY_DEV/grails-1.0 Base Directory: D:/_DEV/grails_apps/demo Environment set to development Note: No plugin scripts found Running script D:/D/MY_DEV/grails-1.0/scripts/CreateService.groovy ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo/grails-app/services Created Service for Login ???? [copy] Copying 1 file to D:/_DEV/grails_apps/demo/test/integration Created ServiceTests for Login D:/_DEV/grails_apps/demo>
?LoginService?{
???? boolean ?transactional? true ????def?check(User?u)?{ ????????def?user? ?User.findWhere(name:?u.name,?password:?u.password) ???????? ?user ????} }
10,在demo/grails-app/views/user目录下创建login.gsp和ok.gsp,它们对应MVC中的View,内容分别为:
login.gsp (复制demo/grails-app/views/user/create.gsp的内容到login.gsp中,并修改): ? < html > ???? head ???????? meta? http-equiv ="Content-Type" ?content ="text/html;?charset=UTF-8" /> name ="layout" ="main"? <!-- ?将Create?User修改为Login? --> title Login </ ????????? ???? body div? class ="nav" ???????????? span? ="menuButton" >< a? ="home" ?href ="${createLinkTo(dir:'')}" Home a ></ span g:link? ="list" ?action ="list" User?List g:link div ="body" h1 ?将flash.message修改为flash.error? g:if? test ="${flash.error}" ?将class="message"修改为class="errors",?将flash.message修改为flash.error? ="errors" ${flash.error} g:if g:hasErrors? bean ="${user}" ???????????????? g:renderErrors? ="${user}" ?as ="list"? g:hasErrors ???????????? ???????????? ?将action="save"修改为action="login"? g:form? action ="login" ?method ="post"? ="dialog" ???????????????????? table ???????????????????????? tbody ???????????????????????? ???????????????????????????? tr? ="prop" ???????????????????????????????? td? valign ="top" ?class ="name" ???????????????????????????????????? label? for Name: label td ="value?${hasErrors(bean:user,field:'name','errors')}" input? type ="text" ?id ="name" ?name ?value ="${fieldValue(bean:user,field:'name')}" ???????????????????????????? tr ? ???????????????????????? ???????????????????????????? ="password" Password: ?maxlength ="16" ="password" ? ???????????????????????? ???????????????????????? ="buttons" ?将value="Create"修改为value="Login"? ="button" ="save" ?type ="submit" ="Login"? /></ g:form
ok.gsp:
? ="${flash.message}"
="message"
${flash.message}
Name:?${user?.name}??? br Password:?${user?.password}
?BootStrap?{
?????def?init? ?{?servletContext? -> ???????? ?User(name:? demo 123456 ).save() ?????} ?????def?destroy? ?{ ?????} }?
D:/_DEV/grails_apps/demo>grails run-app
Welcome to Grails 1.0 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: D:/D/MY_DEV/grails-1.0 Base Directory: D:/_DEV/grails_apps/demo Environment set to development Note: No plugin scripts found Running script D:/D/MY_DEV/grails-1.0/scripts/RunApp.groovy ? [groovyc] Compiling 4 source files to C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/classes Running Grails application.. 2008-02-05 23:46:08.912::INFO:? Logging to STDERR via org.mortbay.log.StdErrLog 2008-02-05 23:46:08.066::INFO:? jetty-6.1.4 2008-02-05 23:46:08.347::INFO:? No Transaction manager found - if your webapp requires one,please configure one. 2008-02-05 23:46:09.081:/demo:INFO:? Set web app root system property: 'demo' = [D:/_DEV/grails_apps/demo/web-app/] 2008-02-05 23:46:09.081:/demo:INFO:? Initializing Log4J from [file:C:/Documents and Settings/Daniel/.grails/1.0/projects/demo/resources/log4j.pro perties] 2008-02-05 23:46:09.113:/demo:INFO:? Initializing Spring root WebApplicationContext [0] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@5facbd: display name [org .codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@5facbd]; startup date [Tue Feb 05 23:46:14 CST 2008]; parent: org.springframew ork.web.context.support.XmlWebApplicationContext@1fef80a [0] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContex t@5facbd]: org.springframework.beans.factory.support.DefaultListableBeanFactory@aa4c7c 2008-02-05 23:46:21.590:/demo:INFO:? Initializing Spring FrameworkServlet 'grails' 2008-02-05 23:46:21.871::INFO:? Started SelectChannelConnector@0.0.0.0:8080 Server running. Browse to http://localhost:8080/demo ?
Welcome demo
Name: demo
Password: 123456
《Grails权威指南》
表
3-1.
Grails
工程目录
注:Grails1.0已将hibernate和spring两个目录移到grails-app/conf目录下了, 而grails-test目录也更名为test,test目录下有integration目录和unit目录,分别存放集成测试代码和单元测试代码 想象一下用您平时做项目时所用的框架组合(比如SSH)来创建同样的Web应用程序,您立刻会感受,Grails让我们专注于业务逻辑,而不用浪费时间在那些scaffolding code(如配置文件)上。从今天开始,您不用再羡慕那些Ruby程序员所用的RoR了,您大可以使用Grails来高效开发Web应用。 您也可以访问Grails官方网站(http://www.grails.org)进一步学习。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |