我正在尝试使用Grails内置的应用程序,但是出现了我不明白的错误。基本上,我有一个枚举:
package com.wbr.manning.common
public enum ChapterType {
CHAPTER("chapter"), PREFACE("preface"), APPENDIX("appendix"), PART("part")
ChapterType(String value) { this.value = value }
String value
String getKey() { name() }
String toString() { value }
}
但是当我尝试列出Chapter对象时,我得到:
java.lang.IllegalArgumentException:没有枚举const类com.wbr.manning.common.ChapterType.part
在java.lang.Enum.valueOf(Enum.java:196)
在grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1163)
在com.wbr.manning.agileAuthor.AAChapterController $ _closure3.doCall(AAChapterController.groovy:39)
在com.wbr.manning.agileAuthor.AAChapterController $ _closure3.doCall(AAChapterController.groovy)
在java.lang.Thread.run(Thread.java:662)
2012-04-02 09:55:23,401 [http-8080-1]错误common.ErrorsController-org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException:没有枚举const类com.wbr.manning.common.ChapterType。部分
对我在这里做错的任何想法吗?我的枚举是否正确,还是需要查看调用代码?
谢谢!
最佳答案
如果要基于其值查找Enum,则需要向枚举添加静态方法,如下所示:
static ChapterType fromString( type ) {
ChapterType.values().find { it.value == type }
}
然后,您可以执行以下操作:
ChapterType c = ChapterType.fromString( 'part' )