grails - 无法保存域类实例;获取类型不匹配错误

标签 grails groovy

我有域类为:

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/

相关文章:

grails - 在grails中实现 “create another like this”功能

java - 我在哪里可以找到 springloaded-core jar 的源代码?

grails - 将分页选项应用于 Grails 中的一对多列表

mysql - 使用groovy域类引用其他表中的字段创建mysql表

grails - Grails安装的插件列表和intellij 11列表之间不匹配

javascript - Grails 2 资源和 yui3 脚本加载器

deployment - Grails部署错误

Groovy 优先级问题

grails - 如何在groovy中将日期与当前日期进行比较

mongodb - 删除操作无法在Jmeter中使用groovy删除mongo中的文档