方法grails.artefact.controller.support.ResponseRenderer的$模糊方法重载$ Trait $ Helper#render

时间:2016-12-06 11:59:45

标签: grails

这个问题有很多,而且没有人回答......当我调用这个方法时,我的控制台中的错误弹出窗口和返回成功。是什么原因造成这种情况?

使用grails 3.1.8

  

grailsous方法重载方法grails.artefact.controller.support.ResponseRenderer $ Trait $ Helper#render。

     

无法解决[class com.union.KardexEntradaController,null]调用哪个方法,原因是:       [interface grails.artefact.controller.support.ResponseRenderer,interface java.lang.CharSequence]       [interface grails.artefact.controller.support.ResponseRenderer,interface java.util.Map]       [interface grails.artefact.controller.support.ResponseRenderer,interface org.grails.web.converters.Converter]

def getKardexs(){
    def kardexs = Kardex.createCriteria().list{
        filial{
            eq('id', params.long('filial'))
        }
        produto {
            eq('categoriaKardex', CategoriaKardex.get(params.long('categoriaKardex')))
            eq('ativo', true)
            order('nome', 'asc')
        }
    }.collect{
        [id: it.id, nome: it.produto.nome]
    }

    render ((kardexs ? kardexs : null) as JSON)
}

3 个答案:

答案 0 :(得分:1)

我认为这是因为如果kardexs为null,那么你将null传递给ResponseRender渲染方法&有3个可供选择,一个参数,一个采用Map,另一个采用CharSequence,另一个采用转换器,你会被警告这个,也就是说你要调用哪一个是暧昧的

答案 1 :(得分:1)

Grails渲染无法呈现NULL值。这就是为什么它抛出Ambiguous方法重载错误,因为它不知道调用哪个方法。还有其他东西而不是null(可能是一些错误消息)。

答案 2 :(得分:0)

我有同样的经历,你不能呈现null,即使使用类型转换,你应该 - 如上所述 - 使用空地图,类似于:this

render ((kardexs ? kardexs : [:]) as JSON)

另一个重要的注意事项,你应该将动作 getKardexs()重命名为不同的东西,因为这被认为是上面定义的 kardexs 的getter属性(或重命名< em> kardexs 到 listKardexs 或其他东西),这可能会导致另一个异常。