Grails 列表的删除方法不起作用

Grails 列表的删除方法不起作用,grails,Grails,我正在一个控制器中创建会话变量-: List<Employee> emp = new ArrayList<Employee>() emp = Employee.findAllByLevel(proj_lev.level_no) session.employee_list = emp render(view: "add_members", model: [proj_lev:proj_lev , proj_lev_right:proj_lev_right , employe

我正在一个控制器中创建会话变量-:

List<Employee> emp = new ArrayList<Employee>()
emp = Employee.findAllByLevel(proj_lev.level_no)
session.employee_list = emp

render(view: "add_members", model: [proj_lev:proj_lev , proj_lev_right:proj_lev_right , employee:session.employee_list])
GSP中的视图是-:

 [tearp.Employee : 2, tearp.Employee : 5, tearp.Employee : 8, tearp.Employee : 9, tearp.Employee : 10][tearp.Employee : 2, tearp.Employee : 5, tearp.Employee : 8, tearp.Employee : 9, tearp.Employee : 10]

列出要删除的员工,然后从“添加的员工”中删除此列表,并将此列表添加到“所有员工”

列出要删除的员工,然后从“添加的员工”中删除此列表,并将此列表添加到“所有员工”

您是否覆盖了
Employee
域对象上的equals方法?我认为这就是问题所在

当您这样说时(不重写equals方法):

它将首先通过hashcode搜索列表中的对象,每次使用
Employee从db中获取对象时,get(…)
hibernate甚至会为同一记录创建新对象,因此每个新对象都有新的hashcode和
list。只要在列表中找不到对象,remove()
方法就不起作用

可能的解决办法: 在您的
Employee
域类中添加此方法:

@Overrid
boolean equals(Employee employee){

return this.id == employee?.id

}
您是否覆盖了
Employee
域对象上的equals方法?我认为这就是问题所在

当您这样说时(不重写equals方法):

它将首先通过hashcode搜索列表中的对象,每次使用
Employee从db中获取对象时,get(…)
hibernate甚至会为同一记录创建新对象,因此每个新对象都有新的hashcode和
list。只要在列表中找不到对象,remove()
方法就不起作用

可能的解决办法: 在您的
Employee
域类中添加此方法:

@Overrid
boolean equals(Employee employee){

return this.id == employee?.id

}

为什么要调用render两次?我想在从列表中删除对象之前和之后检查列表的状态,所以我调用了两次。您正在会话中使用列表。从列表中删除元素后,必须在会话中替换列表。列表新建列表=新建ArrayList()新建列表=会话。员工列表。删除(添加了emp)会话。员工列表=新建列表,但仍不工作。显示的错误是-:无法将类为“java.lang.Boolean”的对象“false”强制转换为行中的类为“java.util.List”-:new_List=session.employee_List.remove(emp_added)为什么要调用render两次?我想检查从列表中删除对象前后列表的状态,所以我打了两次电话。你们在会话中使用列表。从列表中删除元素后,必须在会话中替换列表。列表新建列表=新建ArrayList()新建列表=会话。员工列表。删除(添加了emp)会话。员工列表=新建列表,但仍不工作。显示的错误是-:无法将类为“java.lang.Boolean”的对象“false”强制转换为行中的类为“java.util.List”-:new_List=session.employee_List.remove(emp_added)为什么要调用render两次?我想检查从列表中删除对象前后列表的状态,所以我打了两次电话。你们在会话中使用列表。从列表中删除元素后,必须在会话中替换列表。列表新建列表=新建ArrayList()新建列表=会话。员工列表。删除(添加了emp)会话。员工列表=新建列表,但仍不工作。显示的错误是-:无法将类为“java.lang.Boolean”的对象“false”强制转换为行中的类为“java.util.List”:new\u List=session.employee\u List.remove(添加了emp)
@Overrid
boolean equals(Employee employee){

return this.id == employee?.id

}