登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

杨柳千丝,绊惹春风

普通人日记

 
 
 

日志

 
 
关于我

性格还算开朗,为人还算不错。 长相一般,身高一般,能力一般,人是一般。 不会浪漫,不会情调,不会唱歌,不会跳舞,不会吸烟,不爱喝酒,不会开车,爱听老歌

Groovy 和Grails从入门到精通 第四章 grails 介绍(六)  

2010-07-31 12:31:59|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实现一个域类

      测试类已完成,现在是更新域类直到所有的测试都通过的时候了。列表4-6列出了增加了字段,用来实现图4-6 UML图的Todo域类。

4-6:增加属性、约束条件和toString()方法后的Todo域类

1    class Todo {

2

3         String name

4         String note

5         Date createdDate

6         Date dueDate

7         Date completedDate

8         String priority

9         String status

10

11        static constraints = {

12            name(blank:false)

13        createdDate()

14            priority()

15            status()

16            note(maxSize:1000, nullable:true)

17            completedDate(nullable:true)

18            dueDate(nullable:true)

19            }

20

21            String toString() {

22            name

23            }

24 }

 

在列表4-6中,你可以从Todo域类中看出3-9行的几个字段是StringDate类型。但是,域类有几个附加的属性是Grials规约中所隐含的,不能从表面看到,这就是idversion属性。

Id属性,你或许已猜到,作为域类标识是自动生成独一无二的,但在对象被初始化保存之前是为null

version属性是Hibernate中管理开放式锁定(optimistic locking的一种机制。每次一个对象保存,Version序号将增加,与id属性一样,初始值是nullHibernate每次保存一个对象前,都会从数据库中检查version序号,如果数据库中的version序号与要保存的不一致,这就意味着version序号已在上次读取时被修改,Hibernate将出抛出一个org.hibernate.StaleObjectStateException异常。

11-19行是Grails构造限制(construct of constraints,这是控制属性值的最基本规则。例如12行通过blank:false限制条件指定name属性是必须并且不为空的。16-18行的notecompletedDate dueDate属性允许为null。注意到,16行的note属性最大长度不能超过1000字符。除了约束属性外,构造限制还管理着各字段被Grails脚手架传送到HTML编辑页面的顺序,构造限制中的顺序就是字段在页面中的顺序。域类中的String字段通常会在HTML表现为一个text类型的输入字段(input fieldString字段的maxSize属性传递给HTML输入字段textarea来确定输入的最大数据量。

域类可以通过方法来实现行为(behavior21-23行是重载了toString()方法,Grails域类默认的toString()方法(的行为)是打印出冒号后面的类名和对象ID。为了使toString()更有用,21行将name属性追加到Todo实例前打印。

本节甚至没有学到域类的表面,你将在第6章学到更多关于域关方面。

现在Todo类是完成了,重新运行测试工具(test harness)可以发现两个测试都通过。

 

                 Grails的版本控制文件

Grails包含很多文件,其中大部分是版本控制文件。然而单元测试和应用程序生成及复制文件(the application generate and copy files不属于版本控制。Grials版本控制代码库像一个Subversion或并发代码管理系统(CVS)。下表是非版本控制目录名单:

Grails非版本控制目录:

目录                                     描述

web-app/WEB-INF/classes            包含运行时重编译的类文件

web-app/WEB-INF/lib                   Grails运行时从lib库中拷贝过来的 JAR 文件

web-app/WEB-INF/grails-app        运行时grails-app内容拷贝到这里

web-app/WEB-INF/spring        运行时grails-app/config/spring内容拷贝到这里

test/classes                               包含测试重编译的类文件

test/reports                               测试时生成的TextHTML测试报告

staging                                      运行构建(staging the building WAR文件是的临时目录

 

创建控制器

      创建控制器以后就可以不断重复修改各步骤,以完善这个应用程序。在前面提到过,控制器控制视图与域类交互,当然,Grails脚手架使这个过程简化了。控制器只需一行代码就可以控制脚手架完成那些奇妙的功能和实现基本的CRUD 界面。

      使用Grails create-controller命令创建控制器,这个命令生成一个新的Grails控制器在grails-app/controllers目录中,同时生成一个控制器的集成测试在test/integration目录中,并且在没有grails-app/view/<controllerName>目录时会创建它。

      创建Todo控制类,使用create-controller命令,后面跟可选的控制类名,命令如下:

      >grails create-controller todo

      如果你没有输入类名,将在随后提出你输入。

      执行命令的输出如下:

 

 

 

 

 

 

...

Running script C:\devl\java\grails-1.0\scripts\CreateController.groovy

[copy] Copying 1 file to C:\devl\workspace\collab-todo\grails-app\controllers

Created Controller for Todo

[mkdir] Created dir: C:\devl\workspace\collab-todo\grails-app\views\todo

[copy] Copying 1 file to C:\devl\workspace\collab-todo\test\integration

Created ControllerTests for Todo

      注意到,你在可选类名中输入的是小写类名,根据标准的Groovy类名规约,Grails自动将其首字母转化成大写字母。列表47列举了生成的TodoController类。

Listing 4-7. Grails生成的 TodoController

class TodoController {

def index = { }

}

列表47中的TodoController类包含了一个空的index动作(action。第五章会讲解控制类的动作。

      现在,为了使用Grails脚手架,改变index动作成脚手架属性(scaffold property并且为它指配域类,如列表48所示。这就是所做的全部,它生成了List Page, Create Page, Edit Page Show Page views, 同时还有删除、生成指定的域类功能。

列表 4-8. 可用的脚手架的 TodoController

class TodoController {

def scaffold = Todo

}

      完成如列表48所示的控制器后,刷新浏览器,你将看到一个新的TodoController链接在初始页面上,如图410

 

提示:你可以做更多的改变,改变域类或控制器类不需要重启WEB服务,然而有时改变需要重启服务。创建一个新的控制器需要重启服务,如果控制器没有出现在初始页的控制器列表中,使用Ctrl+C停止服务,再用run-app命令重启服务。

 

 

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

                      

410 增加了TodoController链接的初始页面

 

      点击图410TodoController链接,会打开如图411Todo List页面,Todo List页面是域类的开始页(paginated list)。

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

                 

4-11 Todo List页面

4-11所示的Todo List页面中,你可以通过点击导航栏上的New Todo按钮来增加新的域对象(如图4-12所示)。你也可以点击Id目录中的Id来查看已有的域对象(如图4-13所示)。

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

                 

4-12 创建Todo页面

      Save Page显示的属性列表顺序与限制构造里列举的顺序一样,都是图4-12CreatePage里的顺序。注意到脚手架显示出来的日期类型都是正确的格式。String类型在HTML中以文本输入框显示,createdDate以下拉的日期时间选择表方式显示。另外,note属性是以HTML输入文本区域(HTML text-area input)显示,这是因为最大长度限制。这些还不是全部:Grails脚手架是足够智能的使用构造限制去做些确定事宜,如图4-13所示:

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

                 

4-13 有效检查错误提示

4-13所示,当name属性为空时,提交信息会在页面上部分显示了一个有效性信息提示,这是构造限制里的name属性的blank:false限制条件所起的作用。

4-14是点击TodoList页面中的Id弹出的只读的视图。

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

 图

4-14 显示Todo页面

ShowTodo页面陈列该对象的所有的属性和值,同时提供了删除按钮和进入编辑按钮。编辑页面如图4-15所示:

Groovy 和Grails从入门到精通 第四章 grails 介绍(六) - 虹 - 杨柳千丝,绊惹春风

 4-15

编辑页面      编辑页面几乎和创建页面一样,只是将对象原有值列举出来并且多了UpdateDelete按钮。
  评论这张
 
阅读(1673)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018