我正在尝试使用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' )

10-06 03:46