Forms 如何在grails应用程序中执行正确的验证和重定向

Forms 如何在grails应用程序中执行正确的验证和重定向,forms,validation,grails,Forms,Validation,Grails,我有一个创建和保存方法,如下所示: def create () { def myColorInstance = new Color() return (colorInstance: myColorInstance] } def save () { Date someDate = params.date("somedate", "MM/dd/yyyy") int someInt = params.int("someInt") color = colorService.add(

我有一个创建和保存方法,如下所示:

def create () {
  def myColorInstance = new Color()
  return (colorInstance: myColorInstance]
}

def save () {
  Date someDate = params.date("somedate", "MM/dd/yyyy")
  int someInt = params.int("someInt")
  color = colorService.add(params.colorname, someDate, someInt)
  if (color.hasErrors())
    render (view: "create", model: [colorInstance: color])
  else
    redirect (action: "list")
} 
在我的布局页面上,我有以下内容:

 <g:hasErrors>
       <div class="alert alert-error">Please try submitting again</div>
 </g:hasErrors>

请重新提交
我从中得到的行为是,当用户输入某个内容时,验证失败。他们看到消息
请再次尝试提交
,url变为
http://localhost:8080/myapp/color/save
因此,现在当他们第二次提交时(再次提交时没有输入任何内容),我的应用程序失败,并显示消息:“无法将类为“null”的对象“null”强制转换为类为“int”。请改为尝试“java.lang.Integer”


处理这种情况的最佳方法是什么?我希望用户看到顶部的错误消息,他们应该能够再次更正错误并尝试再次提交,它应该可以工作。

您不能将
int
设置为null,这就是
params.int(“”
可能返回的内容<但是,代码>整数可以为空

Integer someInt = params.int("someInt")
这将修复您的异常,但它返回null的原因与您的视图没有首先传递数据有关

仅供参考这是不正确的语法:

def create () {
  def myColorInstance = new Color()
  return (colorInstance: myColorInstance]
}
应该是:

def create () {  
  [colorInstance: new Color()]
}

你是对的。这是我的一个愚蠢的打字错误<
render(视图:“创建”,模型:[colorInstance:color])
render(视图:“创建”,模型:[colorInstnce:color])
typo!!