Grails中的循环错误

Grails中的循环错误,grails,groovy,Grails,Groovy,我试图实现的是让用户选中一些复选框,然后我将对选中的项目执行一些操作。我在以下控制器代码中得到以下错误: 这是错误,它是对包含每个的行的抱怨: java.lang.NullPointerException: Cannot execute null+null 控制器: def activateSubscriptions (SubscriptionRequest subscriptionRequestInstance) { def temp println ("Params : $

我试图实现的是让用户选中一些复选框,然后我将对选中的项目执行一些操作。我在以下控制器代码中得到以下错误:

这是错误,它是对包含每个的行的抱怨:

java.lang.NullPointerException: Cannot execute null+null
控制器:

def activateSubscriptions (SubscriptionRequest subscriptionRequestInstance) {
    def temp
    println ("Params : $params.subscriptionRequestInstanceCheckBox , Count: $subscriptionRequestInstance.count()")

    params['subscriptionRequestInstanceCheckBox'].each  {
        temp =new Subscriptions(userId:subscriptionRequestInstance.userId,packageId:subscriptionRequestInstance.packageId,dasubscriptionRequestInstanceOfPackExp:subscriptionRequestInstance.dateCreated+30,balanceOfAds:Packages.get(subscriptionRequestInstance.packageId).numOfAds,
        balanceOfMsgs:Packages.get(subscriptionRequestInstance.packageId).numOfMsgs,balanceOfHR:Packages.get(subscriptionRequestInstance.packageId).numOfHR,balanceOfPages:Packages.get(subscriptionRequestInstance.packageId).numOfPages).save(flush:true)

        SubscriptionRequest.get(subscriptionRequestInstance.id).delete(flush:true)
    }
}
这是普惠制:

<g:each in="${subscriptionRequestInstanceList}" status="i" var="subscriptionRequestInstance">
    <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
        <td>
            <g:checkBox checked="false" name='subscriptionRequestInstanceCheckBox' value="${subscriptionRequestInstance.id}"/> &nbsp;&nbsp; 
            <g:link action="show"  id="${subscriptionRequestInstance.id}">${fieldValue(bean: subscriptionRequestInstance, field: "userId")}</g:link>
        </td>
        <td>${fieldValue(bean: subscriptionRequestInstance, field: "packageId")}</td>
        <td><g:formatDate date="${subscriptionRequestInstance.dateCreated}" /></td>
    </tr>
</g:each>

有什么想法吗?

构造函数中的这句话似乎是个问题:

dasubscriptionRequestInstanceOfPackExp:subscriptionRequestInstance.dateCreated+30
如果目标只是修复异常,请将其更改为:

dasubscriptionRequestInstanceOfPackExp: (subscriptionRequestInstance.dateCreated ? subscriptionRequestInstance.dateCreated + 30 : null)
这是假设
dasubscriptionRequestInstanceOfPackExp
字段可为空,或者您认为保存失败没有问题


与其反复使用
Packages.get(subscriptionRequestInstance.packageId)
,为什么不将其存储在这样一个变量中呢?从性能的角度来看,这一点可能毫无意义,但它清除了构造函数参数

def activateSubscriptions (SubscriptionRequest subscriptionRequestInstance) {
    def temp
    println ("Params : $params.subscriptionRequestInstanceCheckBox , Count: $subscriptionRequestInstance.count()")

    def package = Packages.get(subscriptionRequestInstance.packageId)

    params.subscriptionRequestInstanceCheckBox.each  {
        temp = new Subscriptions(
            userId: subscriptionRequestInstance.userId,
            packageId: subscriptionRequestInstance.packageId,
            dasubscriptionRequestInstanceOfPackExp: subscriptionRequestInstance.dateCreated + 30,
            balanceOfAds: package.numOfAds,
            balanceOfMsgs: package.numOfMsgs,
            balanceOfHR: package.numOfHR,
            balanceOfPages: package.numOfPages
        ).save(flush:true)

        SubscriptionRequest.get(subscriptionRequestInstance.id).delete(flush:true)
    }
}

问题不太可能出现在调用
each()
的线路上。尝试注释/取消注释循环中的行,直到找到真正有问题的行。我的赌注是在Loooong线上创建
订阅
def activateSubscriptions (SubscriptionRequest subscriptionRequestInstance) {
    def temp
    println ("Params : $params.subscriptionRequestInstanceCheckBox , Count: $subscriptionRequestInstance.count()")

    def package = Packages.get(subscriptionRequestInstance.packageId)

    params.subscriptionRequestInstanceCheckBox.each  {
        temp = new Subscriptions(
            userId: subscriptionRequestInstance.userId,
            packageId: subscriptionRequestInstance.packageId,
            dasubscriptionRequestInstanceOfPackExp: subscriptionRequestInstance.dateCreated + 30,
            balanceOfAds: package.numOfAds,
            balanceOfMsgs: package.numOfMsgs,
            balanceOfHR: package.numOfHR,
            balanceOfPages: package.numOfPages
        ).save(flush:true)

        SubscriptionRequest.get(subscriptionRequestInstance.id).delete(flush:true)
    }
}