Тип перечисления grails в доменном классе - PullRequest
2 голосов
/ 09 марта 2011

Я использую Грааля 1.3.2 и hbase ..

У меня есть класс домена, одно из полей которого имеет тип enum:

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>

«Создать» действие должно сохранить выбранное значение в дБ.

Когда я отправляю, я получаю исключение:

Cannot cast object 'val1' with class 'java.lang.String' to class 'myPack.MyEnum '

Есть ли способ сохранить значение перечисления в виде строки?

Ответы [ 2 ]

1 голос
/ 10 марта 2011
  1. Пробел после "MyEnum" в GSP и сообщение об ошибке вызывают у меня сомнения, вы можете удалить его из GSP?
  2. Вам не нужно ?, поскольку класс MyEnum всегда должен быть там.
  3. Я считаю, что вам не нужно optionKey, особенно если вы переопределили MyEnum.toString().
  4. Мы пишем select s из enum следующим образом:

, где toFriendlyString () - это метод нашего Enum, который возвращает читаемое пользователем представление String.

0 голосов
/ 10 марта 2011

Кажется, это проблема преобразования типов данных.Вы можете попробовать:

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

После этого назначьте свой доменный объект с новым enumValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...