8

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パーツ間の通信に関する優れたチュートリアルはありますか?

または、gspを介して情報を印刷するためのより良い方法はありますか?

ありがとう

4

1 に答える 1

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>
于 2010-11-25T17:07:23.327 に答える