Grails: используйте контроллер из index.gsp - PullRequest
8 голосов
/ 25 ноября 2010

Я новичок в Grails и хочу использовать метод из конкретного контроллера в моем index.gsp

В Index.gsp я попробовал

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

но там написано, что объект недоступен.

MyController содержит свойство, подобное:

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

Что я делаю не так? Есть хороший учебник о связи между частями грааля?

Или есть лучший способ распечатать информацию через gsp?

Спасибо

1 Ответ

18 голосов
/ 25 ноября 2010

Как правило, при использовании шаблона 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>
...