精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI
2009-10-26 00:00:00 来源:WEB开发网但是,若在 URI 内用 Entry.title 代替 Entry.id 又如何呢?标题几乎都要包含空白。一种解决方法是向 Entry 类内添加另一个字段并让终端用户重新输入没有空白的标题。这种做法不是很理想,因为它要求用户做更多的工作,而且还要求必须要编写另一个验证规则来确保用户能正确输入。更好的方法是让 Grails 根据使用 Entry.title 的位置自动将空白转变为下划线。要实现此目的,需要创建一个定制 codec(即 编码-解码器 的简写)。
创建 grails-app/utils/UnderscoreCodec 并添加清单 10 所示代码:
清单 10. 一个定制 codecclass UnderscoreCodec {
static encode = {target->
target.replaceAll(" ", "_")
}
static decode = {target->
target.replaceAll("_", " ")
}
}
Grails 提供了几个开箱即用的内置 codec:HtmlCodec、UrlCodec、Base64Codec 和 JavaScriptCodec。HtmlCodec 是所生成的 GSP 文件内的 encodeAsHtml() 和 decodeHtml() 方法的源代码。
您也可以向其中添加您自己的 codec。Grails 使用 grails-app/utils 目录内任何一个具有 Codec 后缀的类来将 encodeAs() 和 decode() 方法添加到 String。在本例中,Blogito 内的所有 String 都魔法般地具有了两个新方法:encodeAsUnderscore() 和 decodeUnderscore()。
通过在 test/integration 内创建 UnderscoreCodecTests.groovy 可以验证这一点,如清单 11 所示:
清单 11. 测试一个定制 codecclass UnderscoreCodecTests extends GroovyTestCase {
void testEncode() {
String test = "this is a test"
assertEquals "this_is_a_test", test.encodeAsUnderscore()
}
void testDecode() {
String test = "this_is_a_test"
assertEquals "this is a test", test.decodeUnderscore()
}
}
- ››精通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
更多精彩
赞助商链接