升级后Grails groovy.lang.MissingMethodException

时间:2014-05-15 21:05:40

标签: grails

在我的GSP文件中

<g:form controller="hello" action="createUser">
<g:select id="users"  class="required" name="users"  from="${hello.HelloController.userList()}" noSelection="['':'-Select user-']"/>
在我的HelloController中

class HelloController {

        ..
        def users= []
       ...
        def userList= {

                  return users;
        }

我得到的错误

groovy.lang.MissingMethodException
Message
No signature of method: static hello.HelloController.userList() is applicable for argument types: () values

我尝试使用from=${userList()}并将userList更改为static。所有这些都会带来更多错误这在我在新计算机上设置新环境时运行grails升级之前曾经工作

2 个答案:

答案 0 :(得分:1)

你应该在这里改变一些事情。

一,定义控制器动作的首选方法是方法而不是闭包。

class HelloController {
    def userList() {
        return users
    }
}

二,你的观点不应该是调用控制器方法。您的控制器操作应返回视图渲染所需的模型。

class HelloController {
    def list() {
        return [userList: users]
    }
}

然后在您的视图中hello/list.gsp,您可以访问userList

答案 1 :(得分:1)

HelloController.userList()

那是试图在HelloController类上调用静态方法,并且该静态方法不存在。无论如何,你真的不应该从GSP调用控制器方法。控制器应该在GSP渲染之前完成其工作。如果GSP需要用户列表,您应该让控制器操作检索用户并在呈现GSP之前将它们放入模型中。可能的情况是,从GSP调用自定义标记是有意义的,但是你需要有一些理由来证明这一点。通常,让控制器将数据放入模型中会更有意义。

class MyController {
    def someActionWhichRendersTheViewInQuestion() {
        def users = // initialize this with a query or whatever you need
        [users: users]
    }
}

然后在你的GSP ......

<g:select id="users"  class="required" name="users"  from="${users}" noSelection="['':'-Select user-']"/>

我希望有所帮助。