2015-11-10 5 views
-1

То, что я пытаюсь достичь, это позволить пользователю проверить некоторые флажки, после чего я сделаю некоторые действия над отмеченными элементами. Я получаю ошибку ниже в коде ниже контроллера:ошибка цикла в Grails

Здесь ошибка, это жалуются на строку, содержащую каждый:

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> 

Хотя значениями от println являются:

Params : [1, 2] , Count: 2 

Любые идеи?

+1

Вряд ли проблема возникает в строке, вызывающей 'each()'. Попробуйте комментировать/раскомментировать строки в цикле, пока не найдете реальную оскорбительную линию. Моя ставка находится на линии LOOOOONG, создавая «Подписки». –

ответ

0

Это утверждение в конструктор выглядит проблема:

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) 
    } 
} 
Смежные вопросы