grails在域类中的枚举类型

时间:2011-03-09 14:55:10

标签: java grails enums

我使用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?

2 个答案:

答案 0 :(得分:1)

  1. GSP中的“MyEnum”之后的空格和错误消息让我怀疑,您可以将其从GSP中删除吗?
  2. 你不需要?,因为MyEnum类应该永远在那里。
  3. 我相信您不需要optionKey,特别是如果您已覆盖MyEnum.toString()
  4. 我们以这种方式从枚举中写出select

    &lt; g:select from =“$ {SomeEnum.values()*。toFriendlyString()}” 键= “$ {SomeEnum.values()*名()}” value =“$ {xxxInstance.field.name()}”...... /&GT;

  5. 其中toFriendlyString()是我们的Enum方法,它返回用户可读的String表示。

答案 1 :(得分:0)

这似乎是一个数据类型转换问题。你可以尝试:

def domainObject = new MyDomainClass()
def enumValue = myPack.MyEnum.valueOf(params.enumVal) // This is the conversion.

之后,为您的域对象分配新的enumValue