Сам метод не может вызываться в Grails - PullRequest
0 голосов
/ 25 мая 2011

Я получил ошибку в своем проекте, когда я пытаюсь вызвать метод самостоятельно внутри тела метода. Я положил свой код в GSP.

вот они

/* Method for appending the child menu */
def createMenuChild = { obj , paramMenuArr ->
  def urlChildMenu=obj.menu.url
  def idChildMenu=obj.menu.id
  def nameChildMenu=obj.menu.name

  out << '<div><a href="'+urlChildMenu+'" class="mChld">'<< nameChildMenu<< '</div>'

  def childInstance1= Menu.findById(idChildMenu)
  def child1MenuInstance= Menu.createCriteria().list{
    eq("parentMenu",childInstance1)
    order("sequence", "asc")
  }                                     
  if (child1MenuInstance){
    child1MenuInstance.each {newIt5 ->
      def idChildMenu2=newIt5.id
      paramMenuArr.each { newIt6 -> 
        if (newIt6.menu.id == idChildMenu2){
          owner.call (child1MenuInstance,paramMenuArr)
        }
      }
    }       
  }
}

Я использую owner.call для вызова самого метода. Я получил такую ​​ошибку

Exception Message: No signature of method: bla.....

Кто-нибудь может это исправить?

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Я положил свой код в gsp.

Вы действительно должны поместить этот вид кода в taglib.

Кто-нибудь может это исправить?

Если это просто стандартный рекурсивный метод, то очевидный способ выполнить рекурсивный вызов:

createMenuChild(child1MenuInstance,paramMenuArr)

Попробуйте использовать это вместо

owner.call (child1MenuInstance,paramMenuArr)
2 голосов
/ 25 мая 2011

Вы используете закрытие, не распространенный метод. см .: http://groovy.codehaus.org/Closures

ownler.call означает, что вы хотите вызвать метод с именем "call" владельца (класса) замыкания. Возможно, вы можете исправить это, заменив owner.call на createMenuChild (child1MenuInstance, paramMenuArr). это вызвало бы закрытие с данными параметрами.

1 голос
/ 18 февраля 2015

Хитрость здесь в том, чтобы предварительно определить имя замыкания перед его назначением.

def createMenuChild
createMenuChild = {...}

вместо

def createMenuChild = createMenuChild = {...}

Тогда вы сможете ссылаться на замыкание вместо вызова owner.call.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...