开发者

GRAILS: groovy.lang.MissingPropertyException: No such property.

I'm trying to debug a Grails application. Unfortunately, I have no prior experience in said language.

When I do grails generate-all org.example.Book, I get back a vague error:

Generating controller for domain class org.example.Book ...
groovy.lang.MissingPropertyException: No such property: Event for class: SimpleTemplateScript6
    at SimpleTemplateScript6.run(SimpleTemplateScript6.groovy:22)
    at _GrailsGenerate_groovy.generateForDomainClass(_GrailsGenerate_groovy:88)
    at _GrailsGenerate_groovy$_run_closure1.doCall(_GrailsGenerate_groovy:48)
    at GenerateAll$_run_closure1.doCall(GenerateAll.groovy:42)
    at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
    at gant.Gant.withBuildListeners(Gant.groovy:427)
    at gant.Gant.this$2$withBuildListeners(Gant.groovy)
    at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
    at gant.Gant.dispatch(Gant.groovy:415)
    at gant.Gant.this$2$dispatch(Gant.groovy)
    at gant.Gant.invokeMethod(Gant.groovy)
    at gant.Gant.executeTargets(Gant.groovy:590)
    at gant.Gant.executeTargets(Gant.groovy:589)
Error running generate-all: No such property: Event for class: SimpleTemplateScript6

After looking at the generated org.example.BookController.groovy source, I noticed that it was not fully generated (stopped at List fields = []):

package org.example

// import needed for export plugin
import org.codehaus.groovy.grails.commons.ConfigurationHolder

class BookController {

    ...
    def exportService

    def export = {attrs ->
    def response = attrs.response
    List fields = []

This error appears to be caused by the following code in templates/scaffolding/Controller.groovy:

<%=packageName ? "package ${packageName}\n\n" : ''%>

// import needed for export plugin
import org.codehaus.groovy.grails.commons.ConfigurationHolder

class ${className}Controller {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]^M

    def exportService

    ...

    def export = {attrs ->
    def response = attrs.response
    List fields = []
    <% excludedProps = Event.allEvents.toList() << 'version'
       allowedNames = domainClass.persistentProperties*.name << 'id' << 'dateCreated' << 'lastUpdated'
       props = domainClass.properties.findAll { allowedNames.contains(it.name) && !excludedProps.contains(it.name) && !Collection.isAssignableFrom(it.type) }
       Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[]))
       props.eachWithIndex {p, i -> %>fields.push("${p开发者_JAVA百科.name}"<%="\n"%><% } %>
       Map labels = [:]
       <% props.eachWithIndex { p, i -> %>labels.putAt("\${p.name}", "\${p.naturalName}")<%="\n "%><% } %>

       Map formatters = [:]
       Map parameters = [:]
       response.setHeader("Content-disposition", "attachment; filename=${domainClass.propertyName}s.\${attrs.extension}")
       if("\${attrs.extension}" == "xml") {
            exportService.export(attrs.format, response.outputStream, attrs.exportList, fields, [:], formatters, parameters)
       } else {
            exportService.export(attrs.format, response.outputStream, attrs.exportList, fields, labels, formatters, parameters)
       }
    }
...
}

It appears that the def export {} block seems to be causing problems. Is there something wrong with the above code?


What is the Event class? Is there an import for it?


Check your domain class for syntax errors. Make sure that in your domain class, you've included necessary packages, in your case, package org.example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜