我使用grails 1.3.2和hbase ..
我有域类,其中一个字段是枚举类型:
class MyDomainClass{
MyEnum enumVal
//....
}
public enum MyEnum {
val1("val1"),
val2("val2")
final String value
MyEnum (String value) {
this.value = value
}
String toString() { value }
String getKey() { name() }
}
<g:form action="create">
<g:select name="enumVal" from="${MyEnum ?.values()}" optionKey="key" />
<g:submitButton name="createOb" value="CreateOb"/>
</g:form>
“create”操作必须在db。中保存选定的值。
当我提交时,我得到例外:
Cannot cast object 'val1' with class 'java.lang.String' to class 'myPack.MyEnum '
有没有办法将枚举值保存为String?
答案 0 :(得分:1)
MyEnum
”之后的空格和错误消息让我怀疑,您可以将其从GSP中删除吗? MyEnum
类应该永远在那里。optionKey
,特别是如果您已覆盖MyEnum.toString()
。我们以这种方式从枚举中写出select
:
&lt; g:select from =“$ {SomeEnum.values()*。toFriendlyString()}” 键= “$ {SomeEnum.values()*名()}” value =“$ {xxxInstance.field.name()}”...... /&GT;
其中toFriendlyString()是我们的Enum方法,它返回用户可读的String表示。
答案 1 :(得分:0)
这似乎是一个数据类型转换问题。你可以尝试:
def domainObject = new MyDomainClass()
def enumValue = myPack.MyEnum.valueOf(params.enumVal) // This is the conversion.
之后,为您的域对象分配新的enumValue
。