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}"/>
<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)
}
}