我正在尝试关注grails tutorial here。
当我使用create-controller XXX.Card
创建一个新控制器并根据教程修改它以使用脚手架时:
package XXX
class CardController {
def scaffold = Card
}
点击XXX.CardController时出现以下异常:
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: static XXX.Card.list() is applicable for argument types: (org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap) values: [[max:10, action:list, controller:card]]
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:121)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:342)
Caused by: groovy.lang.MissingMethodException: No signature of method: static XXX.Card.list() is applicable for argument types: (org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap) values: [[max:10, action:list, controller:card]]
at XXX.CardController$_closure2.doCall(script1258397512682.groovy:14)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
at XXX.CardController$_closure2.doCall(script1258397512682.groovy)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
... 5 more
我正在使用Grails 1.1.1和app-engine 0.8.5以及gorm-jpa 0.5插件。
我做错了什么?
以下是我用来重现此问题的脚本:
rm -rf ~/.grails/1.1.1/projects/XXX
grails create-app XXX
cd XXX
grails install-plugin gorm-jpa
grails install-plugin app-engine # Note: specify JPA when prompted
grails create-domain-class XXX.Card
grails create-controller XXX.Card
cat > grails-app/controllers/XXX/CardController.groovy <<EOF
package XXX
class CardController {
def scaffold = Card
}
EOF
cat > grails-app/domain/XXX/Card.groovy <<EOF
package XXX
class Card {
List emails
static hasMany = [emails:String]
}
EOF
grails app-engine
答案 0 :(得分:1)
我刚刚使用Grails 1.1.1重新创建了您的场景:
grails create-app XXX
cd XXX
grails create-domain-class XXX.Card
grails create-controller XXX.Card
-- Edited grails-app\Controllers\XXX\Card.groovy removing the index action and adding the scaffold declaration "def scaffold = Card"
grails run-app
当我访问http://localhost:8080/XXX/card时,我获得了Card类的相应列表页面(没有条目,也没有列,因为我没有向Card添加任何内容)
请注意小写“卡片”(您似乎正确),这很重要。 URL中的控制器路径默认以小写字母开头。
希望这会有所帮助。如果您无法按照这些步骤进行操作,我会查看您安装的插件。
答案 1 :(得分:1)
您是否尝试过安装gorm-jpa插件?我不认为list()是在app-engine插件中实现的,而是在gorm-jpa中实现的。
jdo没有gorm支持。
答案 2 :(得分:0)
在论坛上进行了一些对话之后,看来GORM目前只与App Engine轻松合作。在所涉及的各种插件的下一个版本(app-engine和gorm-jpa)之前,最好远离使用App Engine的GORM。
感谢Tomas的所有帮助。