精通Grails: 用定制URI和codec优化Grails中的URI - 编程入门网
对象而不是主键或外键的角度来思考。
如果没有匹配 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 页面
重启 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 添加一个新的定制映射
现在,以 /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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |