【问题标题】:Grails - How to clear previous validation errors in command object?Grails - 如何清除命令对象中以前的验证错误?
【发布时间】:2013-03-24 19:48:13
【问题描述】:

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

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

【问题讨论】:

  • 场景 3:浏览器缓存了该页面。对象上不再存在错误。
  • @JamesKleeh : 如何清除 Grails 服务器页面中的浏览器缓存?

标签: grails grails-orm grails-controller command-objects


【解决方案1】:

就像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

    【讨论】:

      【解决方案3】:

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

      See here!

      【讨论】:

      • 我只使用 2.2...但是我们只能在 groovy 类(命令或控制器)中调用 clearErrors,但是当我在浏览器中单击“返回”时不会调用任何操作
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多