Grails 如何在控制器中绑定/更新整个InstanceList?
我是grails中的新bie,我有以下疑问 问题域:Grails 如何在控制器中绑定/更新整个InstanceList?,grails,grails-controller,Grails,Grails Controller,我是grails中的新bie,我有以下疑问 问题域: 父域类具有布尔值 瞬态属性“isValid” 子域具有布尔属性 “是有效的” Parent/list.gsp允许用户更改 父实例的isValid属性 在ParentInstanceList中,通过更新 ParentController中的函数,我 可以进一步使用来设置每个家长 儿童财产“有效” 父域类 class Parent { String name boolean isValid = false static hasMany =
- 父域类具有布尔值 瞬态属性“isValid”
- 子域具有布尔属性 “是有效的”
- Parent/list.gsp允许用户更改 父实例的isValid属性 在ParentInstanceList中,通过更新 ParentController中的函数,我 可以进一步使用来设置每个家长 儿童财产“有效”
class Parent {
String name
boolean isValid = false
static hasMany = [children:Child]
static transients =['isValid']
}
class Child {
String name
boolean isValid
Parent parent
static belongsTo = [parent:Parent]
}
子域类
class Parent {
String name
boolean isValid = false
static hasMany = [children:Child]
static transients =['isValid']
}
class Child {
String name
boolean isValid
Parent parent
static belongsTo = [parent:Parent]
}
母公司/list.gsp
<g:form method="post" action="update" >
<div class="list">
<table>
<thead>
<tr>
<g:sortableColumn property="id" title="${message(code: 'parent.id.label', default: 'Id')}" />
<g:sortableColumn property="name" title="${message(code: 'parent.name.label', default: 'Name')}" />
<g:sortableColumn property="isValid" title="${message(code: 'parent.isvalid.label', default: 'isValid?')}" />
</tr>
</thead>
<tbody>
<g:hiddenField name="parentInstanceList" value="${parentInstanceList }"/>
<g:each in="${parentInstanceList}" status="i" var="parentInstance">
<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
<td><g:link action="show" id="${parentInstance.id}">${fieldValue(bean: parentInstance, field: "id")}</g:link></td>
<td>${fieldValue(bean: parentInstance, field: "name")}</td>
<td>
<g:checkBox name="isValid" value="${parentInstance?.isValid }"/>
</td>
</tr>
</g:each>
</tbody>
</table>
</div>
<div class="paginateButtons">
<g:paginate total="${parentInstanceTotal}" />
</div>
<div class="buttons">
<span class="button">
<g:actionSubmit class="update" action="update" value="${message(code: 'default.button.update.label', default: 'update')}" />
</span>
</div>
到目前为止,我能够通过params.parentInstanceList检索所有父级的ID,但我无法弄清楚如何绑定每个parentInstance的更改属性。
如果有一个单亲实例,那么就可以很容易地做到这一点
Parent parentInstance = Parent.get(params.id)
parentInstance.properties = params
提前谢谢
Rehman我更喜欢为每一行渲染一个特定命名的复选框:
<g:checkBox
name="Parent_${parentInstance.id}"
value="${parentInstance.isValid ? 'on' : 'off'}" />
然后收集所有选中的复选框:
def update = {
Collection<Parent> checked = params.collect{ Map.Entry that ->
that.value != "on" ? null : getParentForCheckbox(that.key)
}.findAll{ it != null }
... // and then assign 'isValid' by hand
}
def更新={
Collection checked=params.collect{Map.Entry该->
that.value!=“on”?null:getParentForCheckbox(that.key)
}.findAll{it!=null}
…//然后手动分配'isValid'
}
您可以使用数组属性,即它,将复选框命名为parentInstanceList[0]
,然后将properties=params
分配给具有parentInstanceList
属性的某个对象,但它很容易出错:您无法保证在HTML中呈现的parentInstanceList
与您指定属性的属性相同