我有如下的域类:
package mnm.schedule
class Project {
static hasMany = [ tasks : Tasks , users : User ]
String name
static constraints = {
name(nullable:false)
tasks(nullable:true)
}
}
User.groovy
package mnm.schedule
import org.example.*;
class User extends SecUser {
//relationships. . . .
static belongsTo = [ company : Company, role : Role, resource : Resource]
static hasMany = [ holidays : Holiday, tasks : Tasks, pt:String ]
Profile profile
Project project
String username
String password
boolean enabled
List pt
boolean ptTaken
}
我有一个视图文件,其中包含以下代码片段:
<g:each in="${ans}">
<li>${it.username.toUpperCase()}<g:checkBox name="checkedUsers" value="${ans}" checked="false" /></li>
</g:each>
变量ans是数组列表,它有用户对象。我使用g:checkBox,以便最终用户可以“检查”所需的用户name.When用户提交此表单,我在我的控制器中执行此操作:
def users = params.checkedUsers
users.each { index ->
new Project(name:"testing",users:index).save()
}
这个想法是,我需要添加选择用户(通过复选框)到项目中。
但这会抛出如下错误:
2012-02-03 10:13:08,173 ["http-bio-8080"-exec-4] ERROR errors.GrailsExceptionResolver - TypeMismatchException occurred when processing request: [POST] /scheduleNew/project/project - parameters:
_checkedUsers:
_checkedUsers:
Add: Add
checkedUsers: anto2
Provided id of the wrong type for class mnm.schedule.User. Expected: class java.lang.Long, got class java.lang.String. Stacktrace follows:
Message: Provided id of the wrong type for class mnm.schedule.User. Expected: class java.lang.Long, got class java.lang.String
怎么回事?我哪里做错了?
发布于 2012-02-03 15:13:06
对我来说,有几件事似乎有点奇怪(但也许我没有完全理解您想要实现的目标)。
查看:
<g:each in="${ans}">
<li>${it.username.toUpperCase()}<g:checkBox name="checkedUsers"
value="${it.id}" checked="false" /></li>
</g:each>
我会传递id而不是整个列表(你有value="${ans})
在控制器中,传递的参数是字符串类型,这就是为什么会出现类型不匹配的原因。有几种方法可以做到这一点,一种解决方案如下:
控制器:
def actionCalled = {
def project = new Project(name:"testing")
def users = params.checkedUsers
users.each { index ->
def user = User.findById(index.toLong())
project.addToUsers(user)
}
project.save()
}
我相信您可以进一步简化这一过程。
https://stackoverflow.com/questions/9123848
复制相似问题