2

当用户单击浏览器后退按钮时,如何清除来自 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

4 回答 4

3

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

    $(window).bind('beforeunload', function() {jQuery.get('${createLink(action: 'clearUploadSession')}');} );
于 2013-03-25T08:22:05.653 回答
2

你的问题是在客户端,而不是在服务器端。当您单击返回按钮时,客户端不会重新加载页面,因此您想在服务器上完成的任何事情都不会完成。

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

window.onbeforeunload = function () { }

资源:

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

于 2013-03-25T08:17:30.647 回答
0

I think that what you are looking for is the POST Redirect GET process that's explained in the wikipedia.

Post/Redirect/Get (PRG) is a web development design pattern that prevents some duplicate form submissions, creating a more intuitive interface for user agents (users). PRG implements bookmarks and the refresh button in a predictable way that does not create duplicate form submissions.

If the user ended the flow (success message like you said) the back button should go to the beginning of the flow instead of showing the cached page. If you look, this is the default behavior of the scaffold pages (create, save, edit, update). The protected post pages like save and update will issue a redirect that will avoid this cache. Just generate a controller for a domain class and you will see what I'm talking.

于 2013-03-28T18:30:16.713 回答
0

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

看这里!

于 2013-03-24T22:20:01.353 回答