Grails Version: 2.5.0
Spring Web Flow: 2.1.0
step 1 File->New->Project->Grails
step 2 添加Web Flow依赖
step 3 新建domain类
grails-app -> domain -> New -> Grails Domain Class
User.groovy的代码如下:
class User { String username String password static constraints = { } }
step 4 创建controller和views
step 5 修改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 = {//on("login"){...}.to "ok"表示点击login按钮后所要去的页面为ok login { on( "login" ) { if ( "wyd" != 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() } }
step 6
在grails-app\views\user\目录下新建一个名为“loginSystem”的子目录,该名称为UserController.groovy中的loginSystemFlow的“loginSystem”相对应。
step 7
在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 >
step 8
运行项目
浏览器访问:http://localhost:8080/login/user/loginSystem
源码下载地址:https://github.com/wenyiyi/Grails-WebFlow
(参考自:http://www.blogjava.net/BlueSUN/archive/2007/09/08/143544.html)