Groovy,Grails关闭链接的问题

时间:2012-12-07 14:00:50

标签: grails groovy

我很难过,我会感激一点帮助......

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 ->
           ...
    }
    ..
}

将两个闭包标准和排序联系起来的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

问题在于"Closures always return a value"。您的criteria闭包正在从ordering查询中获取上游结果,该查询未定义为接受(Groovy正在尝试向其提供咖喱值+ ordering的结果,共3个参数)。

两种潜在的黑客攻击方式:

  1. 你可以通过向你忽略的aproxFilterClosure添加另一个一次性param来解决这个问题。

  2. 或者您可以尝试将其包装成以下内容:

    def x = {Object [] s-> criteria(Arrays.asList(s).subList(0, criteria.maximumNumberOfParameters))}
    

    这将接受任意数量的参数,然后只用它可以处理的参数调用你的标准闭包。

  3. 我并不是说我喜欢上述任何一种想法,但是如果这条道路是您的前进方向,它们可能会让您了解您所看到的具体错误。