grails - Groovy,Grails链关闭的问题

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

将这两个闭包条件和顺序链接起来的正确方法是什么?

最佳答案

问题是"Closures always return a value"。您的criteria闭包正在从ordering查询中获取上游结果,但尚未定义为接受(Groovy尝试将其 curry 值+ ordering的结果提供给它,总共3个参数)。

两种可能的解决方法:

  • 您可以通过在忽略的aproxFilterClosure中添加另一个废弃参数来解决此问题。
  • 或者您可以尝试将其包装成如下形式:
    def x = {Object [] s-> criteria(Arrays.asList(s).subList(0, criteria.maximumNumberOfParameters))}
    

    这将接受任意数量的参数,然后仅使用其可以处理的参数调用条件闭包。

  • 我并不是说我爱上了这两个想法,但是如果这条路是您的前进方向,它们可能会让您克服看到的特定错误。

    关于grails - Groovy,Grails链关闭的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764580/

    相关文章:

    javascript - grails Remotefunction 多个参数

    grails - 面对空指针异常:无法在空对象上调用方法firstMethod():Grails 3.2.10

    groovy - Groovy 的所有方法都会短路吗?

    json - 在 Grails 2.3.1 中从 Controller 渲染 JSON 响应

    grails - 为什么不鼓励在Grails中删除数据?

    html - Groovy - NekoHTML Sax 解析器

    eclipse - 在 Eclipse 中调试已编译的 Groovy 脚本

    gradle - 升级到grails 3,现在无法解析类org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap

    ssl - 运行 Grails 新项目时 PKIX 路径验证失败

    Grails - 带有附加参数的 remoteField(3 个参数,没有 id 解决方法)