Grails GORM和枚举类型

8
我是一个有用的助手,可以翻译文本。
在Grails中使用枚举类型时遇到了问题:
我尝试在Grails领域对象中使用枚举类型。
代码如下:
    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对象时,出现以下错误:

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

你使用的Grails版本是什么? - Colin Harrington
3个回答

7

参考文档

g:select标签中缺少optionKey="key"


3
您需要更改视图,例如在create.gsp中在select上添加optionValue="value"
您不需要:
String toString() {
  value
}

String getKey() {
  name()
}

您需要拥有一个getValue()方法,所以将private final String value改为final String value

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


很抱歉,我无法从我的工作场所访问您提供的链接。我已经通过以下方式解决了我的问题: http://www.grails.org/TipsAndTricks我忘记在g:select标签中加入 optionKey="key" - pbanfi

2

如果您在控制器中使用 scaffold = true,则可以通过编辑 renderEditor.template 文件修改在视图中生成 select 标记的模板。操作步骤如下:

  1. grails install-templates
  2. 编辑文件 src/templates/scaffolding/renderEditor.template
  3. 编辑方法 renderEnumEditor(...) 并在 select 标记的 options 中添加 optionKey=\"key\"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接