欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Grails 脚手架

程序员文章站 2022-04-30 19:36:25
...

 

脚手架

根据指定的领域类,脚手架为你自动生成一个领域相关的完整应用,包括:

  • 必要的 views
  • 控制器的创建/读取/更新/删除(CRUD)操作

 

启动脚手架

让脚手架生效的最简单方法是通过设置 scaffold 属性。 以领域类 Book 为例,你需要在其控制器中设置 scaffold 属性为true就可以了,代码如下:

 

class BookController {
   def scaffold = true
}

上述代码可以正常工作是因为控制器 BookController 命名跟领域类 Book 相一致, 如果我们想脚手架对特定的领域类使用,你可以直接将特定的领域类赋值给scaffold属性,代码如下:

 

def scaffold = Author

设置完毕后,如果你运行grails应用,那么那些必要的动作和视图都将在运行期间自动生成。 根据脚手架的动态机制,以下一些动作将被动态实现:

  • list
  • show
  • edit
  • delete
  • create
  • save
  • update

即基本的CRUD接口将被自动生成。 为了访问以上示例生成的接口,只需要去 http://localhost:8080/app/book

如果你倾向于使用 基于Hibernate映射 的Java领域模型,你依然可以使用脚手架, 只需简单的导入必要的类,并且将此类赋值给scaffold属性即可。

 

动态脚手架

注意当使用scaffold属性的时候,Grails并不是通过代码模板或者代码生成来实现脚手架功能,因此你照样可以在被脚手架过的控制器中增加自己的动作,来跟脚手架过的动作进行交互。比如,在下面的示例中, changeAuthor 可以重新定向到一个并不存在的 show 的动作:

 

class BookController {
   def scaffold = Book

def changeAuthor = { def b = Book.get( params["id"] ) b.author = Author.get( params["author.id"] ) b.save()

// redirect to a scaffolded action redirect(action:show) } }

当然必要的时候,你也可以使用自己的动作来重写被脚手架过的动作,代码如下:

 

class BookController {
   def scaffold = Book

// overrides scaffolded action to return both authors and books def list = { [ "books" : Book.list(), "authors": Author.list() ] } }

所有这些就是所谓的“动态脚手架”,在这里CRUD接口将在运行期间动态生成。不过Grails同样也支持所谓的“静态”脚手架,这将在接下来的章节中讨论。

 

自定义生成的视图

Grails生成的视图中,有些表单能智能地适应 验证约束. 如下面代码所示,只需要简单地重新排列生成器(builder)中约束的顺序,就可以改变其在视图中出现的顺序:

 

def constraints = {
      title()
      releaseDate()
}

你也可以通过使用 inList 约束来生成一个列表(list)而不是简单的文本输入框(text input):

 

def constraints = {
      title()
      category(inList:["Fiction", "Non-fiction", "Biography"])
      releaseDate()
}

或者通过基于数字的 range 约束来生成列表 :

 

def constraints = {
        age(range:18..65)
}

通过约束来限制大小(size)也可以影响生成的视图中可以输入的字符数:

 

def constraints = {
        name(size:0..30)
}

 

生成控制器和视图

以上的脚手架特性虽然很有用,但是在现实世界中有可能需要自定义逻辑和视图。Grails允许你通过使用命令行的方式,来生成一个控制器和相关视图(跟脚手架所做的事情差不多)。为了生成控制器,只需要输入:

 

grails generate-controller Book

或者为了生成视图,只需输入:

 

grails generate-views Book

或者生成控制器和视图,只需输入:

 

grails generate-all Book

如果你的领域类有包名或者从 Hibernate映射的类 来生成,那需要记住一定要用类的全名(包名+类名),如下:

 

grails generate-all com.bookstore.Book

 

定制脚手架模板

使用的Grails自动生成的控制器和试图模板可以自己定制安装模板通过 install-templates 这个命令.