我的控制器在另一个包中有一个命令对象。我在控制器中导入它。我从create action创建并返回此命令的实例:
def create = {
def reportCreateCommand = new ReportCreateCommand()
reportCreateCommand.name = params.name
reportCreateCommand.jrxmlFile = params.jrxmlFile
return [cmd: reportCreateCommand]
}
但是保存操作闭包不会从属性中实例化此命令的对象:
def save = { ReportCreateCommand cmd ->
if (cmd.validate()){
def reportInstance = cmd.createReport()
reportInstance.save()
redirect(action:"show", id:reportInstance.id)
}
else {
render(view:"create", model:[cmd:cmd])
}
}
显然,在保存闭包中cmd为null。命令类有两个属性名称和jrxmlFile。据我所知,grails应该从params实例化save方法中的命令对象。我还需要做其他事吗?
答案 0 :(得分:2)
我认为不需要致电cmd.validate()
,您应该致电cmd.hasErrors()
。默认情况下,命令对象将在创建对象时进行验证
答案 1 :(得分:0)
是的,命令对象上没有validate()方法。只需按照Aaron的建议调用hasErrors