2009-12-28 8 views
8

Tengo un problema con la enumeración de Grails: trato de usar un enumeraion en un objeto de dominio grialesGriales GORM y enumeraciones

código:

package it.xxx.tools.kanban 

    import java.util.Date; 

    class Task { 

     String name 
     String description 

     Priority priority 

static belongsTo = [user:User, project:Project] 

     static constraints = { 
      name(nullable:false, maxSize:25) 
      description(nullable:false, maxSize:1500) 
      priority(nullable:true) 
     } 
    } 

package it.xxx.tools.kanban; 

public enum Priority { 

VERY_LOW("Very Low"), 
LOW("Low"), 
MEDIUM("Medium"), 
HIGH("High"), 
VERY_HIGH("Very High") 

private final String value 

Priority(String value){ 
    this.value = value; 
} 

String toString() { 
    value 
} 

String getKey() { 
    name() 
} 

static list(){ 
    [VERY_LOW, LOW, MEDIUM, HIGH, VERY_HIGH] 
} 
} 

<tr class="prop"> 
    <td valign="top" class="name"> 
    <label for="priority">Priority:</label> 
    </td> 
    <td valign="top" class="value       ${hasErrors(bean:taskInstance,field:'priority','errors')}"> 
    <g:select from="${it.weservice.tools.kanban.Priority?.values()}" value="${taskInstance?.priority}" name="priority" noSelection="['':'']"></g:select> 
    </td> 
</tr> 

utilizo el griales generar-all

Cuando intento para salvar a través de la aplicación web del objeto Task tengo el siguiente error:

Failed to convert property value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority: no matching editors or conversion strategy found 
+0

¿Qué versión de Grails está utilizando? –

+0

Estoy usando grails 1.1.1 – pbanfi

Respuesta

6

contesto mi propia pregunta porque otro usuario puede encontrarlo muy útil: he comprobado las puntas Grails con respecto a las enumeraciones here (parte inferior de la página) En mi aplicación me olvidó la optionKey "clave" = en el g: Seleccione la etiqueta

Agregando que todo se fundió suavemente

2

Debe cambiar la vista, por ejemplo, agregue optionValue="value" en la selección en create.gsp.

No es necesario:

String toString() { 
    value 
} 

String getKey() { 
    name() 
} 

Yo necesita tener un getValue(), por lo que cambiar a private final String valuefinal String value.

Más información (en español): http://thewhitehatsolution.wordpress.com/

+0

Lo siento, pero no puedo acceder al enlace que proporcionó desde mi lugar de trabajo He podido resolver mi problema a continuación: http: //www.grails. org/TipsAndTricks Olvidé la optionKey = "clave" en la etiqueta g: select – pbanfi

2

Si está utilizando andamios = true en su controlador, a continuación, también puede modificar la plantilla que genera las etiquetas select en las vistas al editar el archivo renderEditor.template . Para ello:

  1. grails install-templates

  2. Editar el archivo src/templates/andamios/renderEditor.template
  3. Editar la renderEnumEditor método (...) y añadir en optionKey = \ "clave \" a la seleccione las opciones de la etiqueta.