当我尝试在方法体内调用方法时,我的项目出错了。我把代码放在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.....
任何人都可以解决它?
答案 0 :(得分:3)
我把代码放在gsp中。
你应该把这种代码放在taglib中。
任何人都可以解决它?
如果这只是一个标准的递归方法,那么执行递归调用的明显方法是:
createMenuChild(child1MenuInstance,paramMenuArr)
尝试使用此代替
owner.call (child1MenuInstance,paramMenuArr)
答案 1 :(得分:2)
你使用的是闭包而不是常用的方法。见:http://groovy.codehaus.org/Closures
ownler.call意味着您要调用闭包所有者(类)的名为“call”的方法。你可以通过createMenuChild(child1MenuInstance,paramMenuArr)替换owner.call来修复它。这将用给定的参数调用闭包。
答案 2 :(得分:1)
这里的技巧是在分配之前预先定义闭包名称。
def createMenuChild
createMenuChild = {...}
而不是
def createMenuChild = createMenuChild = {...}
然后你将能够引用闭包而不是调用owner.call。