我在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发布于 2011-10-19 20:16:56
我自己回答这个问题,因为其他用户可能会发现它很有用:我查看了grails关于enum选择的提示(页面底部)在我的实现中,我忘记了g:here标记中的optionKey=“键”
补充说所有的工作都很顺利
发布于 2009-12-29 00:16:26
您需要更改视图,例如在create.gsp中的select上添加optionValue="value"。
您不需要:
String toString() {
value
}
String getKey() {
name()
}您需要有一个getValue(),因此将private final String value更改为final String value。
更多信息(西班牙语):http://thewhitehatsolution.wordpress.com/
发布于 2010-08-23 01:08:00
如果您在控制器中使用scaffold = true,那么您还可以通过编辑renderEditor.template文件来修改在视图中生成选择标记的模板。为此,请执行以下操作:
选择方法renderEnumEditor(...)的文件,并将optionKey=\"key\"添加到src/templates/scaffolding/renderEditor.template
https://stackoverflow.com/questions/1969448
复制相似问题