2010-11-25 55 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