2017-07-24 6 views
0

Lorsque j'essaie d'enregistrer les données en premier enregistrement, mais quand j'essaye de la deuxième entrée il donne une erreur, ceci est une erreurURI/ProjectTrackerMain/milestone/save Classe java.lang.IndexOutOfBoundsException Message Index: 0, Taille: 0

URI:/ProjectTrackerMain/étape/enregistrer classe : java.lang.IndexOutOfBoundsException message: Index: 0, Taille: 0

ceci est mon code pour enregistrer les données d'étape de l'employé.

def save(){ 
    def milestone=new Milestone(params) 
    milestone.save() 
    List<Employee> 
    employee=Employee.findAllById(session.getAttribute("empID")) 
    EmployeeMilestone employeeMilestone=new EmployeeMilestone() 
    employeeMilestone.setEmployee(employee.get(0)) 
    employeeMilestone.setMilestone(milestone) 
    employeeMilestone.save() 
    redirect(action: "show",id: employeeMilestone.id) 
} 
+0

Copie possible de [À propos de l'enregistrement des données dans la base de données Grails] (https://stackoverflow.com/questions/45095609/about-saving-data-into-grails-databse) – Daniel

+0

Ceci est juste une copie de https: // stackoverflow.com/questions/45095609/about-saving-data-into-grails-databse pour lequel vous avez déjà accepté une réponse. – Daniel

+0

Texte correctement formé – litelite

Répondre

0

employee.get(0) - afin de le faire, vous devez être sûr que employee.size() >=1 mais il est possible que votre liste des employés est emply. dans un tel cas, vous ne pouvez pas obtenir l'élément # 0

0

Il y a tellement de problèmes avec l'extrait de code, je vais essayer de vous aider à comprendre comment mettre tous les éléments ci-dessus dans une bien meilleure façon, en écrivant les choses d'une manière confuse. « t va le rendre plus facile pour vous de débogage:

// You are createing a list in which you query Employee.findAll 
List<Employee> employee=Employee.findAllById(session.getAttribute("empID")) 

//But inside this list you are only looking for that 1 id. 

Votre liste ci-dessus contient toujours 1 élément. Vous utilisez findById qui est vraiment pas nécessaire si vous connaissez l'ID que vous pouvez juste faire

Employee.get(session.getAttribute("empID") as Long) 

//You are then creating employeeMilestone 
    EmployeeMilestone employeeMilestone=new EmployeeMilestone() 
//Then without checking your 1 list result you are directly attempting to get the first element 
    employeeMilestone.setEmployee(employee.get(0)) 

permet donc essayer à nouveau:

def save(){ 
    def milestone=new Milestone(params) 
    milestone.save() 
    //Do you even have something in your session? 
    if (session.getAttribute("empID")) { 
     println "yes we have ${session.getAttribute("empID")}" 
     Employee employee=Employee.get(session.getAttribute("empID") as Long) 
     if (employee) { 
     println "yes we have eployee ${employee?.id} 
     EmployeeMilestone employeeMilestone=new EmployeeMilestone() 
     employeeMilestone.employee=eployee 
     employeeMilestone.milestone=milestone 
     employeeMilestone.save() 
     redirect(action: "show",id: employeeMilestone.id) 
     } else { 
     println "No employee found" 
     } 
    } else { 
     println "session could not be found" 
    } 
} 

Espérons que cela ne permet pas à une 4ème tentative de Le fait que vous ayez du code de redirection dans les actions suggère que vous faites tout ce qui est indiqué ci-dessus dans un contrôleur, ce qui est encore plus faux.

Les tâches transactionnelles d'un service font-elles partie du contrôleur dans un contrôleur et affichent-elles les données à afficher.