Grails-如何清除命令对象中以前的验证错误?
当用户单击“浏览器后退”按钮时,如何清除来自命令对象的先前验证错误消息 以下是示例代码:Grails-如何清除命令对象中以前的验证错误?,grails,gorm,grails-controller,command-objects,Grails,Gorm,Grails Controller,Command Objects,当用户单击“浏览器后退”按钮时,如何清除来自命令对象的先前验证错误消息 以下是示例代码: def create = { UserInfoCommand cmd -> if (cmd.validate()) { println("Command obect Show") render(view:"Show"); } else { println("Command obect Show") render(view: "C
def create = { UserInfoCommand cmd ->
if (cmd.validate()) {
println("Command obect Show")
render(view:"Show");
} else {
println("Command obect Show")
render(view: "Create", model: [cmd:cmd]);
}
}
场景
步骤1:在不输入任何数据的情况下提交表单,然后验证消息将从命令对象显示在GSP上
第2步:提交表单,并将数据和用户导航到成功页面
步骤3:单击浏览器后退按钮并注意以前的验证消息
知道什么是清除验证消息的解决方法吗?我不知道您正在使用的Grails版本,但在Grails 2.2中,您可以使用clearErrors()方法
问题出在客户端,而不是服务器端。当您单击“上一步”按钮时,客户端不会重新加载页面,因此您希望在服务器上执行的任何操作都不会执行 您可以在页面表单上设置一个事件,该事件将告诉浏览器每次重新加载表单,即使是在背面:window.onbeforeuload。即使在此处放置一个空事件处理程序,也会强制重新加载页面:
window.onbeforeunload=函数(){
}
资料来源:
正如loteq所说,我正在捕获beforeunload并请求一个url来清除会话,就像您在controller中执行clearErrors()一样
$(window).bind('beforeunload', function() {jQuery.get('${createLink(action: 'clearUploadSession')}');} );
我认为您正在寻找的是POST-Redirect-GET过程,如中所述 Post/Redirect/Get(PRG)是一种web开发设计模式,它 防止某些重复表单提交,创建更直观的 用户代理(用户)的接口。PRG实现书签和 以可预测的方式刷新按钮,不会创建重复 提交表格
如果用户结束了流(如您所说的成功消息),则返回按钮应转到流的开头,而不是显示缓存的页面。如果查看,这是脚手架页面的默认行为(创建、保存、编辑、更新)。受保护的post页面(如保存和更新)将发出一个
重定向
,以避免此缓存。只需为域类生成一个控制器,您就会看到我在说什么。场景3:浏览器缓存了该页面。该对象上不再存在错误。@JamesKleeh:如何清除Grails服务器页面中的浏览器缓存?我只使用2.2…但我们只能在groovy类(命令或控制器)中调用clearErrors,但在浏览器中单击“上一步”时不会调用任何操作