我正在嘗試調試Grails應用程序。不幸的是,我沒有以前的語言經驗。GRAILS:groovy.lang.MissingPropertyException:沒有這樣的屬性。
當我做Grails的生成,所有org.example.Book,我得到一個模糊的錯誤:
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
看產生org.example.BookController.groovy源之後,我注意到,它不是完全生成(停止在列表字段= []):
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 = []
此錯誤出現通過在模板/腳手架/ 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.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)
}
}
...
}
看來,def導出{}塊似乎是造成問題。上面的代碼有問題嗎?
你說得對!我查了一下,結果發現我需要在Controller.groovy的頂部包含以下行: <%import grails.persistence.Event%> –