WEB开发网
开发学院软件开发Java 精通 Grails: 用定制 URI 和 codec 优化 Grails 中... 阅读

精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: 但是,若在 URI 内用 Entry.title 代替 Entry.id 又如何呢?标题几乎都要包含空白,精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI(9),一种解决方法是向 Entry 类内添加另一个字段并让终端用户重新输入没有空白的标题,这种做法不是

但是,若在 URI 内用 Entry.title 代替 Entry.id 又如何呢?标题几乎都要包含空白。一种解决方法是向 Entry 类内添加另一个字段并让终端用户重新输入没有空白的标题。这种做法不是很理想,因为它要求用户做更多的工作,而且还要求必须要编写另一个验证规则来确保用户能正确输入。更好的方法是让 Grails 根据使用 Entry.title 的位置自动将空白转变为下划线。要实现此目的,需要创建一个定制 codec(即 编码-解码器 的简写)。

创建 grails-app/utils/UnderscoreCodec 并添加清单 10 所示代码:


清单 10. 一个定制 codec
class 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. 测试一个定制 codec
class 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() 
 } 
} 

上一页  4 5 6 7 8 9 10  下一页

Tags:精通 Grails 定制

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接