Grails:java.lang.IllegalArgumentException:没有枚举const

时间:2012-04-02 13:59:27

标签: java grails groovy gorm

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

但是当我尝试列出章节对象时,我得到:

java.lang.IllegalArgumentException: No enum const class com.wbr.manning.common.ChapterType.part
    at java.lang.Enum.valueOf(Enum.java:196)
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1163)
    at com.wbr.manning.agileAuthor.AAChapterController$_closure3.doCall(AAChapterController.groovy:39)
    at com.wbr.manning.agileAuthor.AAChapterController$_closure3.doCall(AAChapterController.groovy)
    at java.lang.Thread.run(Thread.java:662)
2012-04-02 09:55:23,401 [http-8080-1] ERROR common.ErrorsController  - org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException: No enum const class com.wbr.manning.common.ChapterType.part

关于我在这里做错了什么的想法?我的枚举是否正确,还是需要查看调用代码?

谢谢!

3 个答案:

答案 0 :(得分:3)

No enum const class com.wbr.manning.common.ChapterType.part

应为ChapterType.PART。您必须尊重区分大小写。

答案 1 :(得分:2)

如果你想根据它的值查找Enum,你需要像这样在你的枚举中添加一个静态方法:

static ChapterType fromString( type ) {
  ChapterType.values().find { it.value == type }
}

然后你可以这样做:

ChapterType c = ChapterType.fromString( 'part' )

答案 2 :(得分:1)

问题在于您的调用代码。在AAChapterController.groovy的第39行,正在构建一个调用

的条件查询
ChapterType.valueOf("part")

但它应该调用

ChapterType.valueOf("PART")

如果您在此处看不到文字字符串"part",请查找字符串变量并在其上调用.toUpperCase()