`

Grails 脚手架

阅读更多

 

脚手架

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

  • 必要的 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 这个命令.  

分享到:
评论
1 楼 零度弥合 2015-05-20  
博主,我一步一步跟着走,确实生成了views,但是在主页点链接却出现404,请问这是为什么呢?

相关推荐

    grails脚手架2次优化

    NULL 博文链接:https://csc365kl.iteye.com/blog/364141

    grails templates脚手架优化

    NULL 博文链接:https://csc365kl.iteye.com/blog/359616

    Grails权威指南

    第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的原因 ...

    Grails入门教程(二)

    一、建立域关系 二、理解脚手架代码 ……

    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. 脚手架

    grails-scaffold-core:脚手架自己的模板或插件提供的模板的核心功能。 例如grails-scaffold-extjs

    脚手架模板的核心功能位于/ src / groovy / scaffold /或插件提供的模板中。 例如grails-scaffold-angular用法grails create-demo或grails scaffold 两者都做同样的事情,并接受相同的参数。 grails scaffold ...

    grails-scaffold-extjs

    grails-脚手架-extjs Grails 插件,用于使用 ExtJS 前端和 REST 后端生成工作演示。 创建演示 需要覆盖脚手架配置:添加到 Config.groovy grails.plugin.scaffold.core.folders = ['backend':'', 'frontendExtjs':...

    grails-spock-examples:带有基于 Spock 的测试的 Grails 项目

    脚手架 CRUD 操作(基于 Geb) 运行测试 检查源 运行 grailsw test-app unit:spock 以执行所有基于 spock 的单元测试 运行 grailsw test-app integration:spock 以执行所有基于 spock 的集成测试

    joda-time:一个将Joda Time日期时间库集成到Grails中的插件

    Joda-Time插件Joda-Time插件将日期/时间库集成到Grails中。... 增强了Grails的脚手架,以支持具有Joda Time字段的域类。 向Joda Time类型添加兼容性和一致性方法,以便它们与Groovy更好地集成。文献资料

    hida-ui-scaffold:飞ida脚手架

    安装模板并生成UI的脚本 ... grails安装hida-ui模板scaffolding02 scaffolding02 grails安装hida-ui模板scaffolding02 grails安装hida ui模板 创建具有所有字段的域,然后生成视图和控制器(来自src / templates /

Global site tag (gtag.js) - Google Analytics