ID字段上的Grails搜索会引发错误

时间:2014-09-03 17:49:28

标签: grails casting

我有一个搜索页面,用户应该可以根据他们的ID(GORM生成的id,而不是我的域类中的属性)或者他们的名称来搜索作者。 当我搜索作者的名字时,搜索页面工作正常但是当我们尝试搜索他们的ID时,我得到下面的错误。

消息:

java.lang.String cannot be cast to java.lang.Long

请告诉我如何解决这个问题。

这是我在控制器中的搜索方法:

def search(Integer max) {
    params.max = Math.min(max ?: 10, 100)

    def authorList = Author.createCriteria().listDistinct () {
        if ( params.id ) {
            eq("id", "%${params.id}%")
        }
        if ( params.name ) {
            ilike("name", "%${params.name}%")
        }


    respond authorList, model:[authorInstanceCount: Author.count()]
}

2 个答案:

答案 0 :(得分:2)

替换它:

eq("id", "%${params.id}%")

eq("id", params.long('id'))

params.long('id')尝试将参数安全地转换为Long,即如果无法执行转换而不是抛出异常,它将返回null

答案 1 :(得分:1)

您获得的例外情况非常丰富。您正试图在需要java.lang.String的地方传递java.lang.Long。通过params.id而不将其转换为字符串:

eq("id", params.id) // if params.id is java.lang.Long
// or
eq("id", params.id.toLong()) // if params.id is java.lang.String

在关闭listDistinct()方法后,您还错过了关闭大括号(在复制粘贴期间可能会出错)。