Enum in Grails Domain
grails, groovy
Solution
Take a look here ...
Grails Enum Mapping
Grails GORM & Enums
Also you may be hitting this as well. From the docs:
1) Enum types are now mapped using their String value rather than the ordinal value. You can revert to the old behavior by changing your mapping as follows:
static mapping = {
someEnum enumType:"ordinal"
}
Problem
I'm trying to use an `enum` in a Grails 2.1 domain class. I'm generating the controller and views via the `grails generate-all <domain class>` command, and when I access the view I get the error shown below. What am I missing here? Error ``` Failed to convert property value of type java.lang.String to required type com.domain.ActionEnum for property action; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.domain.ActionEnum] for property action: no matching editors or conversion strategy found ``` Enum (in `/src/groovy`) ``` package com.domain enum ActionEnum { PRE_REGISTER(0), PURCHASE(2) private final int val public ActionEnum(int val) { this.val = val } int value() { return value } } ``` Domain ``` package com.domain class Stat { ActionEnum action static mapping = { version false } } ``` View ``` <g:select name="action" from="${com.domain.ActionEnum?.values()}" keys="${com.domain.ActionEnum.values()*.name()}" required="" value="${xyzInstance?.action?.name()}"/> ``` EDIT Now getting error `Property action must be a valid number` after changing the following. View ``` <g:select optionKey='id' name="action" from="${com.domain.ActionEnum?.values()}" required="" value="${xyzInstance?.action}"/> // I tried simply putting a number here ``` Enum ``` package com.domain enum ActionEnum { PRE_REGISTER(0), PURCHASE(2) final int id public ActionEnum(int id) { this.id = id } int value() { return value } static ActionEnum byId(int id) { values().find { it.id == id } } } ``` Domain ``` package com.domain.site class Stat { static belongsTo = Game; Game game Integer action static mapping = { version false } static constraints = { action inList: ActionEnum.values()*.id } String toString() { return "${action}" } } ```