Chinese Controllers

Last updated by admin 3 years ago

Grails ???(Controllers)

???????

????????????????????????????????????????? ???????????????????"Controller"?????????"grails-app/controllers"????????

????????????????URI???????????????action????????????????URI?

??????request-scoped?????????????????. 

??Grails ???

I?????????????"create-controller"?? target????????????????????

grails create-controller
??????? "book" ?????????:
class BookController { … }
BookController ???? <...>/book ??URI????grails ???????????????????????????????????

?????Actions?

??????????closure????????????????URI:

class BookController {
    @Property list = {

// do controller logic // create model

return model }; }

????????<...>/book/list ??URI???????closure?????????URI???????????????????????"index" ?????????????????URI?? <...>/book

???????

????????????(URI????????????????), ????????????"index"???:

@Property index = {
   redirect(action:list)
}
??????????? "defaultAction" ??:
@Property defaultAction = "list"

???????request parameter??session?

????????????????????, ??????????????session?????????? ?????? (+)

class BookController {
    @Property find = {
        def findBy = params["findBy"]
        def appContext = servletContext["appContext"]
        def loggedUser = session["logged_user"]

// do stuff // return model return model }; }

??Flash Scope

Flash scope ?? Rails ?????????????????????????????????????????????????????????????????????

@Property delete = {
    def b = Book.get( params['id'] )
    if(!b) {
        flash['message'] = "User not found for id ${params['id']}"
        redirect(action:list)
    }
    … // remaining code
}

????????Model

??????????????web???, ????????????????????????????Grails ????"properties"????????? ?

@Property save = {
  def b = new Book()
  b.properties = params
  b.save()
}
?????????????????????????????????Book???????????????????????????????"bindData" ???
def sc = new SaveCommand()
bindData(sc, params)

??Model

??model?????????????????map????????????model?????????????map??:

@Property show = {
    def b = Book.get( params['id'] )
    return [ book : b ]
}
???????????model??????????????model????????????
class BookController {
    @Property List books
    @Property List authors
    @Property list = {
           books = Book.list()
           authors = Author.list()
    }
}
???"books" ?"authors" ???????????????????????????????? Spring ModelAndView ????.

??????

??????? (????Ajax ???) ??????????????????????????????? "render" ??:

render "Hello World!"
???????? "Hello World!" ??????????????
// write some markup
render {
   for(b in books) {
      div(id:b.id, b.title)
   }
}
// render a specific view
render(view:'show')
// render a template for each item in a collection
render(template:'book_template', collection:B