我有域类为:
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是具有用户对象的arraylist。我使用g:checkBox,以便最终用户可以“检查”所需的用户名。当用户提交此表单时,我将在 Controller 中执行以下操作:
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
这是怎么回事?我哪里出问题了?
最佳答案
似乎有些事情对我来说有些奇怪(但也许我没有完全理解您要实现的目标)。
View :
<g:each in="${ans}">
<li>${it.username.toUpperCase()}<g:checkBox name="checkedUsers"
value="${it.id}" checked="false" /></li>
</g:each>
我将传递ID而不是整个列表(您的值是value =“$ {ans})
在 Controller 中,传递的参数的类型为String,这就是为什么类型不匹配的原因。有几种方法可以做到这一点,下面是一种解决方案:
Controller :
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()
}
我相信您可以进一步简化。
关于grails - 无法保存域类实例;获取类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123848/