CommandObject无法在grails中工作

时间:2013-09-11 07:11:43

标签: validation grails

我正在研究Grails示例应用程序。我有一个控制器和一个命令对象来验证请求参数,如下所示。

package com.samples

class UserController {

    def index() { redirect action:getUser }

    def getUser(UserCommand userCommand) {
        if(userCommand.hasErrors()){
            if(userCommand.errors.hasFieldErrors("login")) {
                render "provide valid login"
            } else if(userCommand.errors.hasFieldErrors("password")) {
                 render "provide valid password"
            }

        } else {
            render "The user login and password is valid"
        }
    }
}

class UserCommand {
    String login
    String password 

    static constraints = {
        login(blank: false)
        password(blank: false)
    }

}

当我运行Grails应用程序并浏览时,我收到以下错误:

URI
    /Library/user/getUser
Class
    java.lang.NoSuchMethodError
Message
    com.samples.UserCommand.getLogin()Ljava/lang/Object;

错误显示它正在寻找getLogin()方法但我认为get / set方法将由Grails动态生成。

4 个答案:

答案 0 :(得分:0)

尝试在grails-app / domain包中添加UserCommand类。我认为它不在域包中,并且grails无法生成getter / setter。

答案 1 :(得分:0)

除外
def index() { redirect action: getUser }

需要更改为

def index() { redirect action: "getUser" }

看来你的代码工作正常。

对于一般的命令对象:

如果在控制器中包含命令对象,则它已经是“可验证的”。此外,不要将其放在域类中,除非您想要保留数据。如果要将命令对象保留在控制器之外,请将其放在src / groovy中,在这种情况下,您需要将其标记为@grails.validation.Validateable

至于您的代码,将错误消息放在命令对象中,而不是控制器操作中,因此您在一个位置检查它们,然后将带有错误的命令对象返回到视图以显示错误。

package com.samples

class UserController {

    def index() { redirect action: "getUser" }

    def getUser(UserCommand userCommand) {
        if(userCommand.hasErrors()){
            return [userCommand: userCommand]  //if you are returning to the getUser view
        } else {
            render "The user login and password are correct"
        }
    }
}

class UserCommand {
    String login
    String password 

    static constraints = {
        login(blank: false)
        password(blank: false)
    }

}

有关详细信息,请参阅Grails文档:http://grails.org/doc/latest/guide/single.html#commandObjects

答案 2 :(得分:0)

代码没有问题,应该可以正常工作。请检查是否

  • 源文件扩展名为groovy。
  • 您的源文件包含在正确的包和文件夹中。
  • 做一个grails clean。

我猜你刚刚尝试使用Grails框架,但是想在Grails中寻找更好的方法。

答案 3 :(得分:0)

当我在UserController类中包含UserCommand类(而不是在同一文件中写为单独的类)时,它工作正常。

感谢您的所有回复。