2012-02-21 63 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。之後,錯誤消失了。