快速业务通道

精通Grails: 用定制URI和codec优化Grails中的URI - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
对象而不是主键或外键的角度来思考。

如果没有匹配 params.id 的作者,就会返回全部条目的完整列表: entryList = Entry.list( params )。

注意,entryCount 值是被显式计算出来的。Scaffolded GroovyServer Pages (GSP) 代码通常会在 <g:paginate> 标记内调用 Entry.count()。由于会传递回一个过滤了的列表,所以需要在此控制 器的一个变量内处理这一点。

在 flash.id 内存储 params.id 值将允许应用程序将此查询条件传递回 <g:paginate> 标记。 调整 grails-app/views/entry/list.gsp 内的 <g:paginate> 以便利用新的 entryCount 变量以 及存储在 flash 范围内的参数,如清单 8 所示:

清单 8. 针对定制分页调整 list.gsp 页面

<div class="paginateButtons">   <g:paginate total="${entryCount}" params="${flash}"/> </div>

重启 Grails 并在 Web 浏览器内访问 http://localhost:9090/blogito/entry/list/jsmith。屏幕应 该类似图 2:

图 2. 按作者列出条目

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

时间:2011-08-02 IBM Scott Davis

为了确保分页仍能工作,键入 http://localhost:9090/blogito/entry/list/jsmith?max=1。单击 Previous 和 Next 按钮以确保只有 Jane 的 blog 条目才会出现,如图 3 所示:

图 3. 测试定制分页

按作者过滤的功能就绪后,就可以更进一步,创建一个更为友好的定制 URI。

创建一个定制 URI

UrlMappings.groovy 文件为创建新的 URI 提供了额外的灵活性。虽然 http://localhost:9090/blogito/entry/list/jsmith 已经可以发挥作用,但是假设,最新出现的用户请 求要求支持 http://localhost:9090/blogito/blog/jsmith 这样的 URI,又该如何呢?没问题!如清单 9 所示那样向 UrlMappings.groovy 添加一个新的映射:

清单 9. 向 UrlMappings.groovy 添加一个新的定制映射

class UrlMappings {    static mappings = {     "/$controller/$action?/$id?"{      constraints {    // apply constraints here    }    }    "/"(controller:"entry")    "/blog/$id"(controller:"entry", action="list")    "500"(view:''/error'')   } }

现在,以 /blog 开头的那些 URI 都将会被重新定向到条目控制器和列表动作。虽然 $user 或 $login 的描述性可能更好,但是让 $id 与 Grails 约定保持一致就意味着 "/$controller/$action?/ $id?" 和 "/blog/$id"(controller:"entry", action="list") 二者能够指向同一个端点。

在 Web 浏览器内键入 http://localhost:9090/blogito/blog/jsmith 以验证此映射能够工作。

处理好 Users 之后,就可以集中精力为 Entries 创建更友好的 URI。

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

时间:2011-08-02 IBM Scott Davis

创建一个定制 codec

在使用 User.login 而非 User.id 时,URI 很简单,因为它不包含空白。不错,目前尚没有任何的验 证规则强制这种 “无空白” 的要求,但我们可以很轻松地添加一个这样的规则来强制 URI 遵从这一要 求。

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号