我感到难过,将不胜感激。
1)这有效
def critQuery = Vlan.createCriteria()
def criteria = criteriaUtil.aproxFilterClosure.curry(Vlan, params)
vlanList = critQuery(criteria)
2)这也有效
def critQuery = Vlan.createCriteria()
def criteria = {eq('dot1qId', 121.toLong())}
def ordering = {order('name','asc')}
def query = criteria << ordering
vlanList = critQuery(query)
3)但这不起作用
def critQuery = Vlan.createCriteria()
def criteria = criteriaUtil.aproxFilterClosure.curry(Vlan, params)
def ordering = {order('name','asc')}
def query = criteria << ordering
vlanList = critQuery(query)
ErrorMsg:没有方法签名:ch.ethz.id.netcenter.common.util.CriteriaUtil $ _closure1.doCall()适用于参数类型:(java.lang.Class ..
class CriteriaUtil {
..
def aproxFilterClosure = {myClass, map ->
...
}
..
}
将这两个闭包条件和顺序链接起来的正确方法是什么?
最佳答案
问题是"Closures always return a value"。您的criteria
闭包正在从ordering
查询中获取上游结果,但尚未定义为接受(Groovy尝试将其 curry 值+ ordering
的结果提供给它,总共3个参数)。
两种可能的解决方法:
def x = {Object [] s-> criteria(Arrays.asList(s).subList(0, criteria.maximumNumberOfParameters))}
这将接受任意数量的参数,然后仅使用其可以处理的参数调用条件闭包。
我并不是说我爱上了这两个想法,但是如果这条路是您的前进方向,它们可能会让您克服看到的特定错误。
关于grails - Groovy,Grails链关闭的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764580/