2012-02-21 83 views
1

从grails 1.3.7升级到2.0.1后我在控制器中验证命令对象时遇到了奇怪的异常。grails升级2.0.1命令对象验证错误

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method org.codehaus.groovy.grails.orm.hibernate.HibernateGormValidationApi#validate. 
Cannot resolve which method to invoke for [class at.pdts.etsweb.commandobject.UserCommand, null] due to overlapping prototypes between: 
    [class java.lang.Object, interface java.util.List] 
    [class java.lang.Object, interface java.util.Map] 

    at org.grails.datastore.gorm.InstanceMethodInvokingClosure.call(GormEnhancer.groovy:251) 

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 

    at java.lang.Thread.run(Thread.java:662) 

我UserCommand命令对象看起来像这样:

package at.pdts.etsweb.commandobject 

import at.pdts.etsweb.Common 
import grails.validation.Validateable 

    @Validateable 
    class UserCommand { 
     String username 
     String password 
     String firstname 
     String lastname 
     static constraints = { 
      username blank: false, email: true 
      password blank: false, minSize: 8, maxSize: 64, validator: Common.passwordValidator 
      firstname blank: false 
      lastname blank: false 
     } 
    } 

控制器绑定数据如下:

def save { UserCommand command -> 

... 
} 

此时我发现了上述错误消息。我也尝试使用命令对象作为参数保存(UserCommand命令),但没有效果。有没有人有一些提示?

回答

2

我的解决方法是将命令对象类从/ grails-app/controller移到/ src/groovy。之后,错误消失了。