我正在研究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动态生成。
答案 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)
代码没有问题,应该可以正常工作。请检查是否
我猜你刚刚尝试使用Grails框架,但是想在Grails中寻找更好的方法。
答案 3 :(得分:0)
当我在UserController类中包含UserCommand类(而不是在同一文件中写为单独的类)时,它工作正常。
感谢您的所有回复。