问题描述
|
当我尝试在方法体内自行调用方法时,项目出现错误。我把代码放在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。