内容简介
- 理解脚手架
- 客户化脚手架
- 动态查询器
- 高级查询
上一章花了很多时间建立领域模型,这一章就要看怎么用了。
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。下面我们就开始调整页面