Grails groovy枚举值迭代器中缺少PropertyException

Grails groovy枚举值迭代器中缺少PropertyException,grails,groovy,enums,Grails,Groovy,Enums,Grails项目中的Groovy代码在值集合find()迭代期间抛出MissingPropertyException。这并不是每次都会发生,只是有时会发生,而且我没有发现丢失属性异常发生的情况 这是枚举类: public enum SurveyStateTransitions { TRANSITION_ONE(SurveyState.UNDEFINED, [SurveyState.ACQUISITION, SurveyState.PROCESSING] as Set), TRAN

Grails项目中的Groovy代码在值集合find()迭代期间抛出MissingPropertyException。这并不是每次都会发生,只是有时会发生,而且我没有发现丢失属性异常发生的情况

这是枚举类:

public enum SurveyStateTransitions {
    TRANSITION_ONE(SurveyState.UNDEFINED, [SurveyState.ACQUISITION, SurveyState.PROCESSING] as Set),
    TRANSITION_TWO(SurveyState.ACQUISITION, [SurveyState.PROCESSING, SurveyState.ARCHIVED] as Set),

    private SurveyState current
    private Set<SurveyState> transitions

    SurveyStateTransitions(SurveyState current, Set<SurveyState> transitions) {
        this.current = current
        this.transitions = transitions
    }

    public static Set<SurveyState> getTransitions(SurveyState current) {
        values().find { it.current == current }.transitions
    }
}
values().find { it.current == current }.transitions
[2015-12-09 11:26:51,762]       ERROR   errors.GrailsExceptionResolver  MissingPropertyException occurred when processing request: [GET] /marpinion_portal/survey/detail/122
No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState. Stacktrace follows:
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <mpc:surveyAccess>: Error executing tag <mps:butt
ons>: No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
        at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
        at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <mpc:surveyAccess>: Error executing tag <mps:buttons>: No such property:
 current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at gsp_marpinion_portal_surveydetail_gsp$_run_closure2.doCall(gsp_marpinion_portal_surveydetail_gsp.groovy:248)
        at gsp_marpinion_portal_surveydetail_gsp.run(gsp_marpinion_portal_surveydetail_gsp.groovy:251)
        ... 8 more
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <mps:buttons>: No such property: current for class: de.everywhere.marpin
ion.portal.survey.SurveyState
        at gsp_marpinion_portal_surveydetail_gsp$_run_closure2_closure10.doCall(gsp_marpinion_portal_surveydetail_gsp.groovy:245)
        at de.everywhere.marpinion.portal.CrudTagLib$_closure30.doCall(CrudTagLib.groovy:656)
        ... 10 more
Caused by: groovy.lang.MissingPropertyException: No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at de.everywhere.marpinion.portal.survey.SurveyStateTransitions$_getTransitions_closure1.doCall(SurveyStateTransitions.groovy:33)
        at de.everywhere.marpinion.portal.survey.SurveyStateTransitions.getTransitions(SurveyStateTransitions.groovy:33)
        at de.everywhere.marpinion.portal.SurveyTagLib$_closure8.doCall(SurveyTagLib.groovy:78)
        ... 12 more
[2015-12-09 11:26:53,042]       WARN    resource.ResourceTagLib A request was made to render resources for disposition [body] but there are no resources scheduled for that
整个堆栈跟踪:

public enum SurveyStateTransitions {
    TRANSITION_ONE(SurveyState.UNDEFINED, [SurveyState.ACQUISITION, SurveyState.PROCESSING] as Set),
    TRANSITION_TWO(SurveyState.ACQUISITION, [SurveyState.PROCESSING, SurveyState.ARCHIVED] as Set),

    private SurveyState current
    private Set<SurveyState> transitions

    SurveyStateTransitions(SurveyState current, Set<SurveyState> transitions) {
        this.current = current
        this.transitions = transitions
    }

    public static Set<SurveyState> getTransitions(SurveyState current) {
        values().find { it.current == current }.transitions
    }
}
values().find { it.current == current }.transitions
[2015-12-09 11:26:51,762]       ERROR   errors.GrailsExceptionResolver  MissingPropertyException occurred when processing request: [GET] /marpinion_portal/survey/detail/122
No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState. Stacktrace follows:
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <mpc:surveyAccess>: Error executing tag <mps:butt
ons>: No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
        at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
        at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
        at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
        at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <mpc:surveyAccess>: Error executing tag <mps:buttons>: No such property:
 current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at gsp_marpinion_portal_surveydetail_gsp$_run_closure2.doCall(gsp_marpinion_portal_surveydetail_gsp.groovy:248)
        at gsp_marpinion_portal_surveydetail_gsp.run(gsp_marpinion_portal_surveydetail_gsp.groovy:251)
        ... 8 more
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <mps:buttons>: No such property: current for class: de.everywhere.marpin
ion.portal.survey.SurveyState
        at gsp_marpinion_portal_surveydetail_gsp$_run_closure2_closure10.doCall(gsp_marpinion_portal_surveydetail_gsp.groovy:245)
        at de.everywhere.marpinion.portal.CrudTagLib$_closure30.doCall(CrudTagLib.groovy:656)
        ... 10 more
Caused by: groovy.lang.MissingPropertyException: No such property: current for class: de.everywhere.marpinion.portal.survey.SurveyState
        at de.everywhere.marpinion.portal.survey.SurveyStateTransitions$_getTransitions_closure1.doCall(SurveyStateTransitions.groovy:33)
        at de.everywhere.marpinion.portal.survey.SurveyStateTransitions.getTransitions(SurveyStateTransitions.groovy:33)
        at de.everywhere.marpinion.portal.SurveyTagLib$_closure8.doCall(SurveyTagLib.groovy:78)
        ... 12 more
[2015-12-09 11:26:53,042]       WARN    resource.ResourceTagLib A request was made to render resources for disposition [body] but there are no resources scheduled for that
[2015-12-09 11:26:51762]错误。GrailExceptionResolver MissingPropertyException在处理请求[GET]/marpinion\u portal/survey/detail/122时发生异常
类:de.everywhere.marpine.portal.survey.SurveyState没有此类属性:当前。跟踪如下:
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException:错误处理GroovyPageView:错误执行标记:错误执行标记:无此类属性:类的当前属性:de.everywhere.marpine.portal.SurveyState
位于grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
位于grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
位于grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
位于grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
位于grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
原因:org.codehaus.groovy.grails.web.taglib.exceptions.grailstageexception:错误执行标记:错误执行标记:无此类属性:
当前课程:de.everywhere.marpine.portal.survey.SurveyState
在gsp\u Marpine\u门户网站\u surveydetail\u gsp$\u run\u closure2.doCall(gsp\u Marpine\u门户网站\u surveydetail\u gsp.groovy:248)
在gsp\U Marpine\U portal\U surveydetail\U gsp.run(gsp\U Marpine\U portal\U surveydetail\U gsp.groovy:251)
... 8个以上
原因:org.codehaus.groovy.grails.web.taglib.exceptions.grailstageexception:执行标记时出错:无此类属性:类的当前值:de.everywhere.marpin
ion.portal.survey.SurveyState
在gsp\u Marpine\u门户网站\u surveydetail\u gsp$\u run\u closure2\u closure10.doCall(gsp\u Marpine\u门户网站\u surveydetail\u gsp.groovy:245)
在de.everywhere.marpine.portal.CrudTagLib$\u closure30.doCall(CrudTagLib.groovy:656)
... 10多
原因:groovy.lang.MissingPropertyException:没有此类属性:类的当前属性:de.everywhere.Marpine.portal.SurveyState
在de.everywhere.marpine.portal.survey.SurveyStateTransformations$\u getTransitions\u closure1.doCall(SurveyStateTransformations.groovy:33)
在de.everywhere.marpine.portal.survey.SurveyStateTransitions.getTransitions(SurveyStateTransitions.groovy:33)
在de.everywhere.marpine.portal.SurveyTagLib$\u closure8.doCall(SurveyTagLib.groovy:78)
... 还有12个
[2015-12-09 11:26:53042]WARN resource.ResourceTagLib请求为处置[body]提供资源,但没有为此安排资源

谢谢你的帮助。

如果你在你的枚举中添加一个
getCurrent
方法会发生什么?这个问题解决了吗?这要看情况,我通过添加
SurveyStateTransitions.values()修复了它。查找{It.current==current}?.transitions?:[]设置为
而不是
getTransitions(SurveyState current)
中的旧代码。但我仍然不明白为什么旧代码不起作用。我遇到了一个类似的问题。我只能通过删除相应字段的“private”修饰符来修复它。