我有两个类是父类:
class parentItem{
User user
Date startTime
Date endTime
------
Date dateCreated
Date lastUpdated
static hasMany = [ childItems: ChildItem ]
和一个儿童班
class ChildItem{
static belongsTo = [parent : ParentItem]
---------
Date time
Date dateCreated
Date lastUpdated
在允许编辑项目的gsp文件中,我有一个包含如下行的表:
<table id="childDataTable" class="childData">
<g:each in="${ParentInstance?.childItems?.sort{it.id}}" var="childItem" status="i">
<tr class="childRow">
<td>
<g:hiddenField name="childItems[${i}].id" value="${childItem.id}"/</td>
------
<td>
<g:textField name="childItems[${i}].time" class="time" value="${childItem.time}"/>
</td>
<td><a href="#" class="removeButton">✖</a></td>
</tr>
</g:each>
</table>
所以我的问题源于这样一个事实:在控制器中我试图更新这个parentItem,其中一些childItem数据也可能已被更改。我需要parentItem和childItems的集合来更新和保存。
在控制器中我试过这个
def parentInstance = ParentItem.get(params.id)
bindData(parentInstance, params)
我试过
def parentInstance = ParentItem.get(params.id
parentInstance.properties = params
我获得超出界限的两种方式
如果我有两个子项,则消息如下所示:
Index: 1, Size: 1. Stacktrace follows:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.sexingtechnologies.laboratory.ParentItemController$_closure7$$EOChoLzu.doCall(ParentItemController.groovy:158)
at grails.plugin.multitenant.core.servlet.CurrentTenantServletFilter.doFilter(CurrentTenantServletFilter.java:53)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
我不确定错误存在的位置或解决方法。
我试图从params map中提取childItems,但是还没能成功。
任何帮助你都会受到赞赏
答案 0 :(得分:0)
也许你可以在数据绑定之前初始化childItems
,如下所示:
def parentInstance = ParentItem.get(params.id)
parentInstance.childItems = [].withDefault { new ChildItem() }
bindData(parentInstance, params)