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,但在浏览器中单击“上一步”时不会调用任何操作