【发布时间】:2017-01-19 17:28:43
【问题描述】:
我正在尝试将我的 grails 应用程序从 1.3 版升级到 2.5 版。我有一个域类,其中一个字段是枚举。在控制器中,当我执行 domainObj.validate() 时,它总是返回 false。验证错误是 -
grails.validation.ValidationErrors: 1 个错误 字段“typeEnum”上的对象“参数”中的字段错误:拒绝值 [0];代码 [com.TypeEnum.typeMismatch.error,com.TypeEnum.typeMismatch,com.TypeEnum.typeMismatch.error,com.TypeEnum.typeMismatch,typeMismatch.com.TypeEnum,typeMismatch.pspValueTypeEnum,typeMismatch.com.TypeEnum,typeMismatch];参数 [typeEnum];默认消息[No enum constant com.TypeEnum.0]
编辑:进一步分析发现问题不在于枚举,而是parameterObj.properties = params执行时,parameterObj.validate()返回false。
在我的 Grails 2.5 代码中,
parameterObj.validate() //returns true
parameterObj.properties = params
// code to convert String from params to Enum object and assign it to parameterObj
parameterObj.enumField = MyEnumClass.getEnumByName(params.enumNameValue)
parameterObj.validate() //This always return false
注意:以上两种validate()的情况,parameterObj的字段值是完全一样的
在 Grails 2.5 中使用域类的属性有什么变化吗?
【问题讨论】:
-
您能否提供失败字段的域类属性定义,以及参数中键/值的打印输出?如果错误仍然是发布的ValidationError,那么grails显然会尝试将字符串“0”写入TypeEnum字段,这当然会失败,因为字符串值需要转换为TypeEnum
-
是的,Grails 不会接受 TypeEnum 的“0”。因此,在验证之前,我将“0”转换为枚举对象并将其分配给域对象。将上面的代码编辑得更具体
标签: grails enums grails-2.0 grails-domain-class