20130516-Grails In Action-4、让模型工作(01小节)

  • Post author:
  • Post category:其他

内容简介

  • 理解脚手架
  • 客户化脚手架
  • 动态查询器
  • 高级查询

上一章花了很多时间建立领域模型,这一章就要看怎么用了。

1、先给所有的模型创建控制器

grails create-controller com.grailsinaction.User
grails create-controller com.grailsinaction.Profile
grails create-controller com.grailsinaction.Post
grails create-controller com.grailsinaction.Tag

2、修改所有的Controller,装入自动脚手架

1 package com.grailsinaction
2 
3 class TagController {
4 
5     def scaffold = true
6 }

3、运行系统,就能看到自动脚手架的威力了,慢慢体会

grails run-app
http://localhost:8080/hubbu

4、回头看看建立模型时的一些验证,在页面上操作时应该都是有效的,如:

User

1     static constraints = {
2         password(size: 6..8, validator: { passwd, user ->
3             passwd != user.userId
4         })
5         dateCreated()
6         profile(nullable: true)
7     }

Profile

 1     static constraints = {
 2         fullName(nullable: true)
 3         bio(nullable: true, maxSize: 1000)
 4         homepage(url: true, nullable: true)
 5         email(email: true, nullable: true)
 6         photo(nullable: true)
 7         country(nullable: true)
 8         timezone(nullable: true)
 9         jabberAddress(email: true, nullable: true)
10     }

不过,错误提示有点难懂,不像是给最终用户看的。所以提示的内容需要客户化

5、客户化错误提示

打开/grails-app/i18n/messages.properties就能看到所有系统中已有的错误提示,修改一下就行了,如果使用的是中文环境,就直接修改messages_zh_CN.properties文件即可,这里主要的内容是参数传递需要理解

{0} 属性
{1} 类
{2} 值
{3} 从
{4} 到

6、我们在使用自动生成的页面可以看到,组合框选择关联关系对象时,是使用的对象ID,这个选择很不友好,我们可以用toString()方法修改对象的默认显示内容
,如Profile

1     String toString() {
2         "Profile for ${fullName} (${id})"
3     }

使用下拉选择时的内容就是一个字符串了。

7、我们发现只要建立好脚手架,所有功能都已经完成了,只是有些地方不是很友好而已。这里有个问题,我们真的要使用脚手架产生的应用吗?当我们的业务逻辑变的很复杂,模型很庞大的时候,就不那么好组织这些功能了,所以,官方文档的建议还是自定义UI。下面我们就开始调整页面