我有一个简单的问题。我需要管理域对象上的hasMany集合。我认为我做的是正确的,但没有奏效。我发现了另一篇文章,但它是非常过时和不工作(Handling parameters from dynamic form for one-to-many relationships in grails)如何管理一对多关系 - grails
class User{
static hasMany = ['prefs': Preference]
}
class Preference{
Boolean email
Boolean site
Date dateCreated
Date lastUpdated
}
GSP
<g:each var="t" in="${user.prefs}" status="idx">
<li>
<input type='hidden' name="prefs[${idx}].id" value="${t.id}"/>
Email: <g:checkBox name="prefs[${idx}].email" value="${t.email}" />
Site: <g:checkBox name="prefs[${idx}].site" value="${t.site}" /><
</li>
</g:each>
控制器:
log.info(user.prefs)
user.properties = params
if(!user.save()){ ... }
然后它的错误了:
UserController - [首选项:3,首选项:4]
错误2013年6月4日21:54:41405 [HTTP-BIO-8080-EXEC-12] ERROR errors.GrailsExceptionResolver
IndexOutOfBoundsException异常发生处理时请求:[POST] /用户/首选项 - 参数: 首选项[0] .email:
ID:2个
偏好设定[1] .site:上
偏好设定[0] .email:上
_prefs [1] .site:
_prefs [1] .email:
prefs [1] .id:3
_prefs [0] .site:
p参考文献[0] .site:上
偏好设定[0] .ID:4
索引:1,尺寸:1.堆栈跟踪如下:
消息:索引:1,尺寸:1
是否在设置属性后错误地保存用户?'user.prefs'的日志从不显示'id' 1和2.你能显示控制器代码和POST URL吗?顺便说一句,如果你担心某个特定顺序必须在gsp中显示,那么在'User'域中添加'List prefs'。将'prefs'作为项目添加到'User'的列表中维护索引。 – dmahapatro
user.prefs的日志显示'UserController - [Preference:3,Preference:4]'恰好是分配的两个。它没有显示idx,它显示surroget键。 – Nix
我们还可以看看控制器的动作吗? – dmahapatro