我有一个数据表,有些东西如下
Id Name LastName
1 John Doe
2 Jane Roi
3 Jerry amol
4 Jeff Jels
'SAVE' 'CANCEL'
以上所有行都是可编辑的,我可以编辑所有4行(id,name,lastname)并点击“SAVE”按钮。这里的挑战是我已经将所有4行值传递给控制器并验证每个字段,如果有任何错误必须将错误发送回每行查看,如果罚款则在数据库中更新。怎么做到这一点?请帮帮我
以下是我的观点:
<table id='show_brands_table'>
<tbody>
<g:each in="${brandsList}" status="i" var="brands">
<tr id="tr_brand_${brands.id}" class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td>
<input type="text" id="brand_${brands.id}" value="${brands.brand}" class="${(i % 2) == 0 ? 'even' : 'odd'}"></input>
</td>
<td>
<input type="text" id="brandID_${brands.id}" value="${brands.bpBrandId}" class="${(i % 2) == 0 ? 'even' : 'odd'}"></input>
</td>
<td>
<g:select id="weight${id}" name="weight${id}"from="${}"value="${weight}" onchange="modify();" />
</td>
</tr>
</g:each>
</tbody>
答案 0 :(得分:1)
Grails可以将表单结果绑定到多个对象。对表单元素名称使用前缀后跟一个点来区分各个对象。例如:
<g:each in="${brandsList}" status="i" var="brand">
<input type="text" name="brand_${brand.id}.name" value="${brand.name}">
<input type="text" name="brand_${brand.id}.weight" value="${brand.weight}">
...
</g:each>
在你的控制器中,你必须遍历params并找出已经提交了多少个对象。您可以将前缀作为参数查找,然后将其用作名称空间:
def update() {
for (name in params.keySet()) {
def match = name =~ /^brand_(\d+)$/
if (match) {
def id = m[0][1] as long
def brand = Brand.get(id)
brand.properties['name', 'weight'] = params[name]
brand.save()
}
}
}
有关详细信息,请参阅手册中的Grails Data Binding部分。