首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails GORM和Enums

Grails GORM和Enums
EN

Stack Overflow用户
提问于 2009-12-28 21:23:50
回答 3查看 20.7K关注 0票数 8

我在grails中使用枚举时遇到了一个问题:我尝试在grails域对象中使用枚举

代码:

代码语言:javascript
复制
    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 generate-all命令

当我尝试通过web应用程序保存Task对象时,出现以下错误:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-19 20:16:56

我自己回答这个问题,因为其他用户可能会发现它很有用:我查看了grails关于enum选择的提示(页面底部)在我的实现中,我忘记了g:here标记中的optionKey=“键”

补充说所有的工作都很顺利

票数 7
EN

Stack Overflow用户

发布于 2009-12-29 00:16:26

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

您不需要:

代码语言:javascript
复制
String toString() {
  value
}

String getKey() {
  name()
}

您需要有一个getValue(),因此将private final String value更改为final String value

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

票数 3
EN

Stack Overflow用户

发布于 2010-08-23 01:08:00

如果您在控制器中使用scaffold = true,那么您还可以通过编辑renderEditor.template文件来修改在视图中生成选择标记的模板。为此,请执行以下操作:

选择方法renderEnumEditor(...)的文件,并将optionKey=\"key\"添加到src/templates/scaffolding/renderEditor.template

  • Edit标记的选项中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1969448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档