根据指定的领域类,脚手架为你自动生成一个领域相关的完整应用,包括:
- 必要的 views
- 控制器的创建/读取/更新/删除(CRUD)操作
启动脚手架
让脚手架生效的最简单方法是通过设置 scaffold
属性。 以领域类 Book
为例,你需要在其控制器中设置 scaffold
属性为true就可以了,代码如下:
class BookController {
def scaffold = true
}
上述代码可以正常工作是因为控制器 BookController
命名跟领域类
Book
相一致, 如果我们想脚手架对特定的领域类使用,你可以直接将特定的领域类赋值给scaffold属性,代码如下:
设置完毕后,如果你运行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
或者生成控制器和视图,只需输入:
如果你的领域类有包名或者从 Hibernate映射的类
来生成,那需要记住一定要用类的全名(包名+类名),如下:
grails generate-all com.bookstore.Book
定制脚手架模板
使用的Grails自动生成的控制器和试图模板可以自己定制安装模板通过 install-templates 这个命令.
分享到:
相关推荐
NULL 博文链接:https://csc365kl.iteye.com/blog/364141
NULL 博文链接:https://csc365kl.iteye.com/blog/359616
第1章 寻找grails之旅 1.1 java的困惑 1.2 webc2.0时代 1.3 java的力量 1.4 什么是grails 1.4.1 与java集成 1.4.2 简单而强大 1.4.3 吸取的经验教训 1.5 使用grails的原因 ...
一、建立域关系 二、理解脚手架代码 ……
1. 简介 2. 起步 2.1 下载并安装Grails 2.2 创建一个Grails应用 2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 ...16. 脚手架
脚手架模板的核心功能位于/ src / groovy / scaffold /或插件提供的模板中。 例如grails-scaffold-angular用法grails create-demo或grails scaffold 两者都做同样的事情,并接受相同的参数。 grails scaffold ...
grails-脚手架-extjs Grails 插件,用于使用 ExtJS 前端和 REST 后端生成工作演示。 创建演示 需要覆盖脚手架配置:添加到 Config.groovy grails.plugin.scaffold.core.folders = ['backend':'', 'frontendExtjs':...
脚手架 CRUD 操作(基于 Geb) 运行测试 检查源 运行 grailsw test-app unit:spock 以执行所有基于 spock 的单元测试 运行 grailsw test-app integration:spock 以执行所有基于 spock 的集成测试
Joda-Time插件Joda-Time插件将日期/时间库集成到Grails中。... 增强了Grails的脚手架,以支持具有Joda Time字段的域类。 向Joda Time类型添加兼容性和一致性方法,以便它们与Groovy更好地集成。文献资料
安装模板并生成UI的脚本 ... grails安装hida-ui模板scaffolding02 scaffolding02 grails安装hida-ui模板scaffolding02 grails安装hida ui模板 创建具有所有字段的域,然后生成视图和控制器(来自src / templates /