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

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

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: 现在 Blogito 可以支持多个用户,下一步是让读者能按作者来查看这些条目,精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI(5),按作者显示条目我们的最终目的就是支持像 http://localhost:9090/blogito/entry/list/j

现在 Blogito 可以支持多个用户,下一步是让读者能按作者来查看这些条目。

按作者显示条目

我们的最终目的就是支持像 http://localhost:9090/blogito/entry/list/jdoe 这样的 URI。注意到,User.login 出现在此 URI 内,而不是主键。在这个过程中,还需要对分页(pagination)做稍许调整。

EntryController.list 的搭建(scaffolded)行为不允许按 User 过滤。清单 5 显示了 list 闭包的默认实现:


清单 5. 默认的 list 实现
def list = { 
  if(!params.max) params.max = 10 
  [ entryInstanceList: Entry.list( params ) ] 
} 

若要支持在路径的末尾允许出现一个可选的用户名,还需要对之进行扩展。编辑 grails-app/controllers/EntryController.groovy 并添加一个新的 list 闭包,如清单 6 所示:


清单 6. 按作者限制此列表
class EntryController { 
 def scaffold = Entry 
  
 def list = { 
   if(!params.max) params.max = 10 
   flash.id = params.id 
   if(!params.id) params.id = "No User Supplied" 
 
   def entryList 
   def entryCount 
   def author = User.findByLogin(params.id) 
   if(author){ 
    def query = { eq('author', author) } 
    entryList = Entry.createCriteria().list(params, query)     
    entryCount = Entry.createCriteria().count(query) 
   }else{ 
    entryList = Entry.list( params ) 
    entryCount = Entry.count() 
   } 
    
   [ entryInstanceList:entryList, entryCount:entryCount ] 
 }  
} 

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

Tags:精通 Grails 定制

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