Groovy轻松入门——Grails实战之Web Flow篇

Groovy轻松入门——Grails实战之Web Flow篇,第1张

概述摘要:Spring Web Flow是Spring家族中的一位成员,他能简化Web应用的开发。在Grails0.6中就集成了Spring Web Flow这一Web应用开发利器。下面通过一个实例向大家展示一下在Grails中如何方便的使用Spring Web Flow。 Spring Web Flow是Spring家族中的一位成员,他能简化Web应用的开发。在Grails0.6中就集成了Sprin

摘要:Spring Web Flow是Spring家族中的一位成员,他能简化Web应用的开发。在Grails0.6中就集成了Spring Web Flow这一Web应用开发利器。下面通过一个实例向大家展示一下在Grails中如何方便的使用Spring Web Flow。

Spring Web Flow是Spring家族中的一位成员,他能简化Web应用的开发。在Grails0.6中就集成了Spring Web Flow这一Web应用开发利器。下面通过一个实例向大家展示一下在Grails中如何方便的使用Spring Web Flow。

1,“grails create-app WebFlowDemo”,输出如下:

D:/_DEV/grails_apps>grails create-app WebFlowDemo

Welcome to Grails 0.6 - http://grails.org/
licensed under Apache Standard license 2.0
Grails home is set to: D:/D/MY_DEV/grails0.6

Base Directory: D:/_DEV/grails_apps
Environment set to development
Note: No plugin scripts found
Running script D:/D/MY_DEV/grails0.6/scripts/CreateApp.groovy
OverrIDing prevIoUs deFinition of reference to groovyJarSet
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/src
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFl

owDemo/src/java
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/src/groovy
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/controllers
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/services
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/domain
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/taglib
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/utils
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/vIEws
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/vIEws/layouts
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/i18n
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/conf
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/test
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/test/unit
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/test/integration
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/scripts
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/Js
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/CSS
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/images
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/classes
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/meta-inf
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/lib
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/conf/spring
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/grails-app/conf/hibernate
[propertyfile] Creating new property file:

D:/_DEV/grails_apps/WebFlowDemo/application.propertIEs
[copy] copying 2 files to

D:/_DEV/grails_apps/WebFlowDemo
[copy] copying 2 files to

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF
[copy] copying 5 files to

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/tld
[copy] copying 131 files to

D:/_DEV/grails_apps/WebFlowDemo/web-app
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo/grails-app/conf
[copy] copying 13 files to

D:/_DEV/grails_apps/WebFlowDemo/grails-app
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo/grails-app/conf/spring
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo
[propertyfile] Updating property file:

D:/_DEV/grails_apps/WebFlowDemo/application.propertIEs
Created Grails Application at D:/_DEV/grails_apps/WebFlowDemo
D:/_DEV/grails_apps>

2,“cd WebFlowDemo”,进入工程目录

3,“grails create-domain-class User”,创建一个域类User,输出如下

D:/_DEV/grails_apps/WebFlowDemo>grails create-domain-class User

Welcome to Grails 0.6 - http://grails.org/
licensed under Apache Standard license 2.0
Grails home is set to: D:/D/MY_DEV/grails0.6

Base Directory: D:/_DEV/grails_apps/WebFlowDemo
Environment set to development
Note: No plugin scripts found
Running script

D:/D/MY_DEV/grails0.6/scripts/CreateDomainClass.groovy
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo/grails-app/domain
Created  for User
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo/test/integration
Created Tests for User
D:/_DEV/grails_apps/WebFlowDemo>


4,将grails-app/domain/User.groovy修改为如下内容:

class  User  implements  Serializable {
String username
String password
}

5,“grails generate-all User”,生成所有与域类User相关的目录和文件,输出如下

D:/_DEV/grails_apps/WebFlowDemo>grails generate-all User

Welcome to Grails 0.6 - http://grails.org/
licensed under Apache Standard license 2.0
Grails home is set to: D:/D/MY_DEV/grails0.6

Base Directory: D:/_DEV/grails_apps/WebFlowDemo
Environment set to development
Note: No plugin scripts found
Running script

D:/D/MY_DEV/grails0.6/scripts/Generateall.groovy
[mkdir] Created dir:

C:/documents and Settings/DanIEl/.grails/0.6/projects/WebFlowDemo/classes
Compiling 5 source files to

C:/documents and Settings/DanIEl/.grails/0.6/projects/WebFlowDemo/classes
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/grails-app/i18n
[copy] copying 8 files to

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/grails-app/i18n
[copy] copying 1 file to

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/spring
[copy] copying 1 file to

C:/documents and Settings/DanIEl/.grails/0.6/projects/WebFlowDemo/classes
[copy] copying 1 file to

C:/documents and Settings/DanIEl/.grails/0.6/projects/WebFlowDemo/classes
Generating vIEws for domain class User
Generating controller for domain class User
Finished generation for domain class User
D:/_DEV/grails_apps/WebFlowDemo>


6,将grails-app/controllers/UserController.groovy修改为如下内容

class  UserController {
def index  =  { redirect(action:List,params:params) }

//  the delete,save and update actions only accept POST requests
def allowedMethods  = 

[delete: ' POST ',save: ' POST ',update: ' POST ' ]

def List  =  {
if ( ! params.max)params.max  =   10
[ userList: User.List( params ) ]
}

def show  =  {
[ user : User.get( params.ID ) ]
}

def delete  =  {
def user  =  User.get( params.ID )
if (user) {
user.delete()
flash.message  =   " User ${params.ID} deleted. "
redirect(action:List)
}
else  {
flash.message  =  

" User not found with ID ${params.ID} "
redirect(action:List)
}
}

def edit  =  {
def user  =  User.get( params.ID )

if ( ! user) {
flash.message  =  

" User not found with ID ${params.ID} "
redirect(action:List)
}
else  {
return  [ user : user ]
}
}

def update  =  {
def user  =  User.get( params.ID )
if (user) {
user.propertIEs  =  params
if (user.save()) {
flash.message  =  

" User ${params.ID} updated. "
redirect(action:show,ID:user.ID)
}
else  {
render(vIEw: ' edit ',model:[user:user])
}
}
else  {
flash.message  =  

" User not found with ID ${params.ID} "
redirect(action:edit,ID:params.ID)
}
}

def create  =  {
def user  =   new  User()
user.propertIEs  =  params
return  [ ' user ' :user]
}

def save  =  {
def user  =   new  User()
user.propertIEs  =  params
if (user.save()) {
flash.message  =  

" User ${user.ID} created. "
redirect(action:show,ID:user.ID)
}
else  {
render(vIEw: ' create ',model:[user:user])
}
}

def loginSystemFlow  =  {
login {
on( " login " ) {
if  ( " danIEl "  

!=  params.username  ||   " 123 "  

!=  params.password) {
flash.message  =  

" username or password is invalID "

def user = new User()
user.propertIEs = params
flash.user = user

return error ()
} else {
// 仅仅用来演示如何使用flow scope
flow.message =

"Welcome,${params.username}"
}
}.to "ok"
on("register").to "showRegisterVIEw"
}

ok()

showRegisterVIEw()
}
}



on("login"){...}.to "ok"表示点击login按钮后所要去的页面为ok,如果验证失败("danIEl" != params.username || "123" != params.password),则利用内置的error(),使用户返回login页面;而on("register").to "showRegisterVIEw"是类似的,不再累述。


7,在grails-app/vIEws/user/目录下新建一个名为“loginSystem”的子目录,该名称为UserController.groovy中的loginSystemFlow的“loginSystem”相对应。

8,在grails-app/vIEws/user/loginSystem/目录下新建login.gsp,ok.gsp,showRegisterVIEw.gsp三个GSP文件(这三个文件的文件名与

def loginSystemFlow = {
login {
...
}

ok()

showRegisterVIEw()
}

中粗体突显的state名相对应,其中login为start state,而ok和showRegisterVIEw为end state) ,并将其内容修改为:
login.gsp

< HTML >
< head >
< Meta  http-equiv ="Content-Type" 

content ="text/HTML; charset=UTF-8"   />
< Meta  name ="layout"  content ="main"   />
< Title > Login Page </ Title >
</ head >
< body >
< div  class ="nav" >
< span  class ="menubutton" >< a  class ="home"
href ="${createlinkTo(dir:'')}" > Home </ a >
</ span >
</ div >
< div  class ="body" >
< h1 >
Login Page
</ h1 >
< g:if  test ="${message }" >
< div  class ="message" >
${message }
</ div >
</ g:if >
< g:form  action ="loginSystem"  method ="post" >
< div  class ="dialog" >
< table >
< tbody >
< tr  class ='prop' >
< td  valign ='top'  class ='name' >
< label  for ='username' >
Username:
</ label >
</ td >
< td  valign ='top'  class ='value 

${hasErrors(bean:user,fIEld:'username','errors')}' >
< input  type ="text" 

ID ='username'  name ='username'
value ="${user?

.username?.encodeAsHTML()}"   />
</ td >
</ tr >
< tr  class ='prop' >
< td  valign ='top'  class ='name' >
< label  for ='password' >
Password:
</ label >
</ td >
< td  valign ='top'  class =

'value  ${hasErrors(bean:user,fIEld:'password','errors')}' >
< input  type ="text" 

ID ='password'  name ='password'
value ="${user?

.password?.encodeAsHTML()}"   />
</ td >
</ tr >
</ tbody >
</ table >
</ div >
< div  class ="buttons" >
< span  class ="button" >< g:submitbutton  class ="save"
name ="login"  value ="Login" ></ g:submitbutton >
</ span >
</ div >
< g:link  action ="loginSystem"  event ="register" >

Register </ g:link >
</ g:form >
</ div >
</ body >
</ HTML >

ok.gsp
${message } < br  />

< g:link  action ="loginSystem" > back to login page </ g:link >

showRegisterVIEw.gsp
This is a register page  < br  />
< g:link  action ="loginSystem" > back to login page </ g:link >


9,“grails run-app”,启动Grails应用,输出如下

D:/_DEV/grails_apps/WebFlowDemo>grails run-app

Welcome to Grails 0.6 - http://grails.org/
licensed under Apache Standard license 2.0
Grails home is set to: D:/D/MY_DEV/grails0.6

Base Directory: D:/_DEV/grails_apps/WebFlowDemo
Environment set to development
Note: No plugin scripts found
Running script D:/D/MY_DEV/grails0.6/scripts/RunApp.groovy
[mkdir] Created dir:

D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/lib
Compiling 1 source files to

C:/documents and Settings/DanIEl/.grails/0.6/projects/WebFlowDemo/classes
Running Grails application..
2007-09-08 00:12:24.443::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2007-09-08 00:12:24.521::INFO:  jetty-6.1.4
2007-09-08 00:12:26.425:/WebFlowDemo:

INFO:  Set web app root system property: '@grails.project.key@'

= [D:/_DEV/grails_apps/WebFlowDemo/web-app/]

2007-09-08 00:12:26.425:/WebFlowDemo:

INFO:  Initializing Log4J from

[D:/_DEV/grails_apps/WebFlowDemo/web-app/WEB-INF/classes/log4j.propertIEs]
2007-09-08 00:12:26.472:/WebFlowDemo:

INFO:  Loading Spring root WebApplicationContext
[9282] hibernate.ConfigurableLocalSessionfactorybean

Building new Hibernate SessionFactory
[9922] mvc.GrailsUrlHandlerMapPing Neither 'urlMap'

nor 'mapPings' set on SimpleUrlHandlerMapPing
[12750] commons.GrailsConfigUtils [GrailsContextLoader] Grails application loaded.
[12797] mvc.GrailsWebRequestFilter Initializing filter 'grailsWebRequest'
[12797] mvc.GrailsWebRequestFilter Filter 'grailsWebRequest' configured successfully
[12797] filter.UrlMapPingsFilter Initializing filter 'urlMapPing'
[12797] filter.UrlMapPingsFilter Initializing filter 'urlMapPing'
[12797] filter.UrlMapPingsFilter Filter 'urlMapPing' configured successfully
[12797] filter.UrlMapPingsFilter Filter 'urlMapPing' configured successfully
[12797] filter.GrailsReloadServletFilter Initializing filter 'reloadFilter'
[12797] filter.GrailsReloadServletFilter Filter 'reloadFilter' configured successfully
[12891] servlet.GrailsdispatcherServlet Initializing servlet 'grails'
[12954] servlet.GrailsdispatcherServlet

FrameworkServlet 'grails': initialization started
2007-09-08 00:12:36.562:/WebFlowDemo:

INFO:  Loading WebApplicationContext for Spring FrameworkServlet 'grails'
[13485] servlet.GrailsdispatcherServlet

Using context class [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext]

for servlet 'grails'
[13485] servlet.GrailsdispatcherServlet

Using MultipartResolver [org.springframework.web.multipart

.commons.CommonsMultipartResolver@dd7404]
[13485] servlet.GrailsdispatcherServlet

Using LocaleResolver [org.springframework.web.servlet.i18n.SessionLocaleResolver@ebbf5c]
[13500] servlet.GrailsdispatcherServlet

Unable to locate themeResolver with name 'themeResolver':

using default [org.springframework.web.servlet.
theme.FixedThemeResolver@192c766]
[13516] servlet.GrailsdispatcherServlet

No HandlerAdapters found in servlet 'grails': using default
[13532] servlet.GrailsdispatcherServlet

Unable to locate RequestToVIEwnameTranslator with name 'vIEwnameTranslator':

using default [org.springfra
mework.web.servlet.view.DefaultRequestToViewNameTranslator@a40575]
[13532] servlet.GrailsdispatcherServlet

Using MultipartResolver

[org.springframework.web.multipart.commons.CommonsMultipartResolver@dd7404]
[13532] servlet.GrailsdispatcherServlet

FrameworkServlet 'grails': initialization completed in 578 ms
[13532] servlet.GrailsdispatcherServlet Servlet 'grails' configured successfully
2007-09-08 00:12:37.374::INFO:  Started [email protected]:8080
Server running. browse to http://localhost:8080/WebFlowDemo


10,访问 http://localhost:8080/WebFlowDemo/user/loginSystem


11,输入任意登录信息,并按一下Login按钮,我直接按Login按钮 :)


12,输入danIEl和123,并按一下Login按钮
Welcome,danIEl
back to login page

13,点击"back to login page"链接,在点击login页面上的Register链接
This is a register page
back to login page

一个最简单的Spring Web Flow应用完成。

总结

以上是内存溢出为你收集整理的Groovy轻松入门——Grails实战之Web Flow篇全部内容,希望文章能够帮你解决Groovy轻松入门——Grails实战之Web Flow篇所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1267403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存