Validation 检查hasErrors并验证后将错误返回到Grails中的gsp页面
我正在构建这个与用户配置文件一起工作的web应用程序。用户编辑配置文件,如果输入错误的数据,配置文件将以红色显示无效字段并显示消息。非常简单的场景。但由于某些原因,它没有像我想象的那样工作。我可能在什么地方遗漏了什么。以下是我在控制器中的操作 正如您在下面的代码中所看到的,我创建了一个新的概要文件,使用include列表将参数绑定到它,以仅绑定概要文件接受的那些参数,然后在概要文件实例上调用hasrerrors。在调试模式下,当用户输入错误时,我可以看到myProfile有错误,但是当我返回到editProfile页面时,它不会显示哪个字段有错误。我的gsp表单有render error标签,并且每个字段都有errorValidation 检查hasErrors并验证后将错误返回到Grails中的gsp页面,validation,grails,gsp,Validation,Grails,Gsp,我正在构建这个与用户配置文件一起工作的web应用程序。用户编辑配置文件,如果输入错误的数据,配置文件将以红色显示无效字段并显示消息。非常简单的场景。但由于某些原因,它没有像我想象的那样工作。我可能在什么地方遗漏了什么。以下是我在控制器中的操作 正如您在下面的代码中所看到的,我创建了一个新的概要文件,使用include列表将参数绑定到它,以仅绑定概要文件接受的那些参数,然后在概要文件实例上调用hasrerrors。在调试模式下,当用户输入错误时,我可以看到myProfile有错误,但是当我返回到e
def update (){
def myProfile = new Profile()
dataBind(params, myProfile, include:[.....])
if (myProfile.hasErrors()){
respond myUser.errors, view: 'editProfile'
return
}
else{
redirect(action:"viewProfile")
}
}
我的普惠制是这样的,我现在无法访问我的家庭电脑来发布确切的普惠制页面:
<g:hasErrors bean="${myUser}" field="name">
<g:message error="${myUser.errors.getFieldErrors("name")}" />
</g:hasErrors>
将整个对象传递给gsp,而不是试图将错误传递回去。假设gsp页面中的bean是“myUser”,那么呈现语句应该是这样的:
render view: 'editProfile', model: [myUser: myProfile]
使用
respondbean.errors
时,将根据类名而不是变量名调用bean
在您的情况下,您需要以profile
的方式访问gep中的bean,如下所示:
//variable in controller
def myProfile = new Profile()
//bean in views
<g:hasErrors bean="${profile}" field="name">
<g:message error="${profile.errors.getFieldErrors("name")}" />
</g:hasErrors>
因为看起来您正在执行一个HTML请求(不是Ajax),所以我通常会使用myUser,而不是myUser.errors来响应。然后gsp可以做一个测试。当hasErrors为true时,我们何时使用respond,何时使用redirect?当hasErrors()为true时,我不知道该怎么办,我想停止流并在gsp页面中显示错误。我知道“返回”会停止流动。但是我应该使用respond还是redirect?同样,如果我在一个gsp页面中有两个域对象,并且都有错误,那么有没有办法在这两个页面上都显示错误?我相信respond不会访问两个域实例,如果我错了请更正我在上面对另一个答案做了一些评论,有什么建议或建议吗?当hasErrors()为true时,您呈现视图并传递带错误的bean,然后返回。是的,您可以有多个带错误的bean,只需使用
,这将检查任何有错误的bean。您可以在Grails文档中了解更多关于它的信息:这样我就可以向视图发送多个域对象。这是有道理的。我其实是在跟踪脚手架是怎么做的。我为我的域类生成了控制器和视图,并遵循了代码结构,这就是为什么我希望使用与scaffolding相同的方法来响应。
render (view:'editProfile', model:[myUser: myProfile])