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

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

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: 您应该注意到的第一件事情是,若终端用户没有提供 params.max 和 params.id 二者的值,精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI(6),就用默认值填充,现在,Scaffolded GroovyServer Pages (GSP) 代码

您应该注意到的第一件事情是,若终端用户没有提供 params.max 和 params.id 二者的值,就用默认值填充。现在,先不要担心 flash.id — 我稍后在探讨有关分页问题的时候还会对之进行详细讨论。

params.id 值通常是一个整型 — 确切的说是主键。我们一般习惯于 /entry/show/1 和 entry/edit/2 这样的 URI。我本可以在 grails-app/conf/UrlMappings.groovy 内设置一个映射以便返回一个描述性更好的名称,比如 params.name 或 params.login,但现有的映射已经获取了操作名称后的路径元素并将其存储在 params.id 内。我只是充分利用了现有的行为。在 URLMapper.groovy 内,如清单 7 所示,可以看到返回 params.id 的默认映射:


清单 7. UrlMappings.groovy 内的默认映射
class UrlMappings { 
  static mappings = { 
   "/$controller/$action?/$id?"{ 
    constraints {} 
  } 
  //snip 
 } 
} 

由于这不是 User 的主键,所以不能像往常那样使用 User.get(params.id)。相反,必须使用 User.findByLogin(params.id)。

如果找到了一个匹配的 User,就需要创建一个查询块。这就需要用到 Hibernate Criteria Builder。在本例中,我们限制了列表只包含匹配某特定作者的那些条目。同样地,我们注意到 GORM 也允许您从对象而不是主键或外键的角度来思考。

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

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

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:精通 Grails 定制

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