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

问题描述 投票:2回答:4

当用户单击浏览器后退按钮时,如何清除来自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步:单击浏览器后退按钮并注意以前的验证消息。

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

grails gorm grails-controller command-objects
4个回答
3
投票

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

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

2
投票

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

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

window.onbeforeunload = function () { }

资源:

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


0
投票

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

See here!


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.