0

在我的 grails 项目中,我使用了方法Object.findAllByIdInList(),将列表作为参数传递。使用的代码如下:

def allSelectedIds = ReceiptItem.findAllByIdInList(par)

其中 ReceiptItem 是一个域类,定义如下:

class Receipt {
    double totalAmount;
    Date releaseDate;
    int vatPercentage;
    int discount;
    Boolean isPayed;
    Boolean isInvoice;
    static belongsTo = [patient:Patient]
    static hasMany = [receiptItems:ReceiptItem]

    static constraints = {
        receiptItems(blank:  false)
        patient(blank: false)
        totalAmount(blank: false)
        vatPercentage(blank: false, nullable: false)
    }
}

并且par是定义如下的 id 列表:

def par = params.list("receiptItemsSelected")

receiptItemsSelected在gsp页面中定义成remoteFunction()如下:

params: '\'receiptItemsSelected=\' + jQuery(this).val()'

问题是上面的行抛出了以下异常:

java.lang.String cannot be cast to java.lang.Long. Stacktrace follows:
Message: java.lang.String cannot be cast to java.lang.Long

我不明白为什么它会抛出这个异常。

谢谢你的帮助

4

1 回答 1

1

可能列表paridsas String。通常id对于域对象存储为Long. 试试这个

ReceiptItem.findAllByIdInList(par*.toLong())

*还要确保id表示为 string isNumber()

assert !'C'.isNumber()
assert '4'.isNumber()
于 2013-06-28T15:08:52.973 回答