无法调用方法本身

问题描述

| 当我尝试在方法体内自行调用方法时,项目出现错误。我把代码放在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.....
有人可以解决吗?     

解决方法

  我把代码放在gsp中。 您确实应该将这种代码放入taglib中。   有人可以解决吗? 如果这只是一个标准的递归方法,那么执行递归调用的明显方法是:
createMenuChild(child1MenuInstance,paramMenuArr)
尝试使用它代替
owner.call (child1MenuInstance,paramMenuArr)
    ,您使用的不是常规方法。请参阅:http://groovy.codehaus.org/Closures ownler.call意味着您要调用闭包的所有者(类)的名为“ call”的方法。也许您可以通过用createMenuChild(child1MenuInstance,paramMenuArr)替换owner.call来修复它。这将使用给定的参数调用闭包。     ,这里的技巧是在分配闭包名称之前预先定义它。
def createMenuChild
createMenuChild = {...}
代替
def createMenuChild = createMenuChild = {...}
这样,您就可以引用闭包,而不必调用owner.call。