2009-12-28 105 views
8

我在Grails的使用枚举一个问题: 我尝试在一个Grails域对象的Grails GORM和枚举

代码使用enumeraion:

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> 

我使用Grails产生-all命令

当我尝试通过Web应用程序保存任务对象,我有以下错误:

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

您使用的是哪个版本的Grails? – 2009-12-28 15:43:48

+0

我正在使用grails 1.1.1 – pbanfi 2009-12-29 08:41:28

回答

6

我回答我的问题,因为其他用户可以找到它有用: 我检查有关枚举here(在页面底部) 我在执行我忘了在克option键=“键” Grails的提示:选择标记

添加,所有顺利启动

2

您需要更改视图,例如在create.gsp中的select上添加optionValue="value"

你并不需要:

String toString() { 
    value 
} 

String getKey() { 
    name() 
} 

呦需要有一个getValue(),所以更改private final String valuefinal String value

更多信息(西班牙文):http://thewhitehatsolution.wordpress.com/

+0

很抱歉,我无法访问您在工作场所提供的链接 我已经能够解决我的问题: http://www.grails。 org/TipsAndTricks 我忘了 optionKey =“key” in the g:select tag – pbanfi 2009-12-29 08:52:47

2

如果你使用的支架=真在你的控制器,那么你还可以修改通过编辑renderEditor.template文件生成的意见,选择标签模板。要做到这一点:

  1. grails install-templates

  2. 编辑文件src /模板/脚手架/ renderEditor.template
  3. 编辑方法renderEnumEditor(...)和\ “键\” 中添加option键=的选择标签的选项。