Контроллеры Grails повторили код для всех действий - PullRequest
2 голосов
/ 07 июня 2011

Представьте себе этот контроллер:

class exampleController{

def action1 = {}

def action2 = {}

def action3 = {}

def action4 = {}

def action5 = {}

}

Я хочу иметь возможность возвращать во всех действиях в этом контроллере одинаковые параметры. Вообразив это:

def user = session.user    
[user: user]

Есть ли способ сделать это, кроме написания одинакового кода для всех действий? Параметры возврата session.user являются лишь примером. Я не хочу его возвращать.

Ответы [ 3 ]

5 голосов
/ 07 июня 2011

Простое решение - поместить этот код в метод и вызывать его из каждого действия

class exampleController{

  def action1 = {getModel()}

  def action2 = {getModel()}

  def action3 = {getModel()}

  def action4 = {getModel()}

  def action5 = {getModel()}

  private getModel() {
    def user = session.user    
    [user: user]    
  }
}

Хотя для этого требуется некоторое количество повторений (вызов одного и того же метода), гораздо более очевидно, что здесь происходит. При отладке / тестировании контроллера легко забыть о фильтрах и перехватчиках, которые часто могут привести к таким вопросам, как

что здесь @ **% происходит?

3 голосов
/ 07 июня 2011
0 голосов
/ 08 июня 2011

У меня похожий случай, и я изменил леса grails для генератора контроллера.

class MyClassController {

    def list = {
        ...
    }

    def show = {
        def eInstance = beanIfExist()
        ...
    }

    def edit = {
        def eInstance = beanIfExist()
        ...
    }

    def update = {
        def eInstance = beanIfExist()
        ...
    }

    def delete = {
        def eInstance = beanIfExist()
        ...
    }

    def beanIfExist = {
        def beanInstance = MyClass.get(params.id)
        if (beanInstance) {
            return beanInstance
        } else {
            flash.message = "Error, invalid record."
            redirect(action: "list")
            return null
        }
    }

}

Это мое предложение, теперь, если вам нужен другой, который отправил данные для просмотра, то вы можетеиспользовать перехватчики.

...