精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI
2009-10-26 00:00:00 来源:WEB开发网在命令行提示符键入 grails test-app 运行测试。所看到的结果应该类似清单 12:
清单 12. 测试成功运行后的输出$ grails test-app
-------------------------------------------------------
Running 2 Integration Tests...
Running test UnderscoreCodecTests...
testEncode...SUCCESS
testDecode...SUCCESS
Integration Tests Completed in 157ms
-------------------------------------------------------
运行中的 Codec
UnderscoreCodec 也就绪后,您就可以支持在 URI 中包括用户和条目标题 — 比如,http://localhost:9090/blogito/blog/jsmith/this_is_my_latest_entry。
首先,调整 UrlMappings.groovy 内的 /blog 映射以支持一个可选的 $title,如清单 13 所示。还记得么,在 Groovy 内,尾部加个问号代表这是可选的。
清单 13. 在 URI 映射内允许可选标题class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(controller:"entry")
"/blog/$id/$title?"(controller:"entry", action="list")
"/entry/$action?/$id?/$title?"(controller:"entry")
"500"(view:'/error')
}
}
接下来,调整 EntryController.list 来说明新的 params.title 值,如清单 14 所示:
清单 14. 处理控制器内的 params.titleclass EntryController {
def scaffold = Entry
def list = {
if(!params.max) params.max = 10
flash.id = params.id
if(!params.id) params.id = "No User Supplied"
flash.title = params.title
if(!params.title) params.title = ""
def author = User.findByLogin(params.id)
def entryList
def entryCount
if(author){
def query = {
and{
eq('author', author)
like("title", params.title.decodeUnderscore() + '%')
}
}
entryList = Entry.createCriteria().list(params, query)
entryCount = Entry.createCriteria().count(query)
}else{
entryList = Entry.list( params )
entryCount = Entry.count()
}
[ entryInstanceList:entryList, entryCount:entryCount ]
}
}
我已经在此查询内使用了 like 以让此 URI 更为灵活。例如,用户可以键入 /blog/jsmith/mastering_grails 来返回所有以 mastering_grails 开头的标题。如果您愿意更为严格一些,可以使用此查询内的 eq 方法来要求一个确切的匹配。
在 Web 浏览器内键入 http://localhost:9090/blogito/jsmith/Codecs_in_Grails 来观察运行中的这个新的 codec。您的屏幕应该类似图 4:
图 4. 按用户名和标题查看一个 blog 条目
图片看不清楚?请点击这里查看原图(大图)。
结束语
URI 是一个 Web 应用程序的命脉。Grails 的默认设置是一个很好的开端,但是您也应习惯于定制这些 URI 以最好地满足您的 Web 站点的要求。得益于您的艰苦工作,Blogito 现在具有了 Users 和 Entries。但更为重要的是,您对 URI 使用其他内容而不是主键来查看它们。您了解了如何通过调整控制器代码创建更为友好的 URI、向 UrlMappings.groovy 添加映射以及创建一个定制 codec。
下一次,您将创建一个登录表单以便能对 Blogito Users 进行身份验证。一旦用户登录,他们就能上传一个文件用作 blog 条目的主体 — HTML、一个图像或是一个 MP3 文件。到那时,就可以享受精通 Grails 带来的乐趣了。
- ››精通Photoshop之通道详解
- ››定制个性化的对话框窗口类
- ››定制 SWT/RCP 界面:如何编写一个漂亮的 SWT/RCP ...
- ››定制基于 Visual studio 2005 平台 Windows CE(AR...
- ››定制版黑雨 blackra1n 越狱3.1.2 全系 iPhone
- ››定制 Eclipse RCP 应用程序,第 1 部分: 可与 SWT...
- ››精通 Grails: 使用 Grails 进行单元测试(单元测试...
- ››精通 Grails: 创建自定义插件
- ››精通 Grails: 在企业中使用 Grails
- ››精通 Grails: Grails 与移动 Web
- ››精通 Grails: Grails 与遗留数据库
- ››精通 Grails: RESTful Grails
更多精彩
赞助商链接