Grails - 如何清除命令对象中的先前验证错误?

时间:2013-03-24 19:48:13

标签: grails gorm grails-controller command-objects

当用户点击浏览器后退按钮时,如何清除来自Command对象的先前验证错误消息?

以下是示例代码:

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:点击浏览器后退按钮,注意以前的验证信息。

知道清除验证消息的解决方法是什么?

4 个答案:

答案 0 :(得分:3)

就像loteq说的那样,即时捕获beforeunload并请求一个清除会话的URL,就像你在控制器中执行clearErrors()一样

    $(window).bind('beforeunload', function() {jQuery.get('${createLink(action: 'clearUploadSession')}');} );

答案 1 :(得分:2)

您的问题出在客户端,而不是服务器端。当您单击后退按钮时,客户端不会重新加载页面,因此您无法在服务器上完成任何操作。

您可以在页面表单上设置一个事件,告诉浏览器每次都重新加载表单,即使在后面:window.onbeforeunload。即使在那里放置一个空事件处理程序,也会强制重新加载页面:

window.onbeforeunload = function () { }

来源:

http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript

答案 2 :(得分:0)

我不知道您正在使用的Grails版本,但在Grails 2.2中,您可以使用clearErrors()方法。

See here!

答案 3 :(得分:0)

我认为您正在寻找的是POST重定向GET流程,该流程已在wikipedia中解释。

  

Post / Redirect / Get(PRG)是一种Web开发设计模式   防止一些重复的表单提交,创建更直观   用户代理(用户)的界面。 PRG实现了书签和   以可预测的方式刷新按钮,不会创建重复   表格提交。

如果用户结束了流程(如您所说的成功消息),则后退按钮应该转到流程的开头,而不是显示缓存页面。如果你看,这是脚手架页面的默认行为(创建,保存,编辑,更新)。受保护的帖子页面(如保存和更新)将发出redirect以避免此缓存。只需为域类生成一个控制器,你就会看到我在说什么。