Grails 1.1 Web层 - Models(模型)与Views(视图)

Returning the Model

一个model本质上就是一个map,在视图渲染时使用。map中的keys转化为变量名,用于视图的获取。第一种方式是明确的return一个model:def show = { [ book : Book.get( params.id ) ] }如果没有明确的 model被return,控制器(Controller)的属性将会被视为 model。

所以允许你这样编写代码:class BookController { List books List authors def list = { books = Book.list() authors = Author.list() } }这可能由于实际上控制器(Controller)是 prototype(原型)范围。换句话说,每个请求都会创建一个新的控制器(Controller)。 否则,像上面的代码,就不会
是线程安全的。

上面示例中,books 和 authors属性在视图中都是可用的。

一个更高级的方式就是 return 一个 Spring ModelAndView 类的实体:import org.springframework.web.servlet.ModelAndView def index = { def favoriteBooks = … // get some books just for the index page, perhaps your favorites // forward to the list view to show them return new ModelAndView("/book/list", [ bookList : favoriteBooks ]) }