2010-11-25 57 views
8

我是新來的Grails使用控制器,我想在我的index.gsp中使用的方法從特定的控制器的Grails:從index.gsp中

在index.gsp中,我試圖

<g:each in="${MyController.myList}" var="c"> 
    <p>${c.name}</p> 
</g:each> 

但它說財產不可用。

包含myController的像一個屬性:

def myList = { 
     return [My.findAll() ] 
    } 

我到底做錯了什麼?有關於grails-parts之間的溝通的好教程嗎?

或者有更好的方式來獲取通過gsp打印的信息嗎?

感謝

+0

我認爲如果你能告訴我,我可以在哪裏找到Grails/Groovy項目的最佳實踐,這將是非常有幫助的。 – elCapitano 2010-11-25 16:38:32

回答

18

一般來說,使用Model-View-Controller模式的時候,你不希望你的看法瞭解任何控制器。控制器的工作就是將模型提供給視圖。因此,而不是讓index.gsp直接響應請求,你應該有一個控制器處理它。然後控制器可以獲得必要的所有域對象(模型),並將它們傳遞給視圖。例如:

// UrlMappings.groovy 
class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(controller:"index") // instead of linking the root to (view:"/index") 
     "500"(view:'/error') 
    } 
} 

// IndexController.groovy 
class IndexController { 
    def index() { // index is the default action for any controller 
     [myDomainObjList: My.findAll()] // the model available to the view 
    } 
} 

// index.gsp 
<g:each in="${myDomainObjList}" var="c"> 
    <p>${c.name}</p> 
</g:each> 
+1

這太冗長了。如果您從'index'操作呈現index.gsp,則無需指定視圖屬性和模型屬性,只需返回模型映射即可。 – 2010-11-25 18:25:50