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!!