当用户点击浏览器后退按钮时,如何清除来自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:点击浏览器后退按钮,注意以前的验证信息。
知道清除验证消息的解决方法是什么?
答案 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()方法。
答案 3 :(得分:0)
我认为您正在寻找的是POST重定向GET流程,该流程已在wikipedia中解释。
Post / Redirect / Get(PRG)是一种Web开发设计模式 防止一些重复的表单提交,创建更直观 用户代理(用户)的界面。 PRG实现了书签和 以可预测的方式刷新按钮,不会创建重复 表格提交。
如果用户结束了流程(如您所说的成功消息),则后退按钮应该转到流程的开头,而不是显示缓存页面。如果你看,这是脚手架页面的默认行为(创建,保存,编辑,更新)。受保护的帖子页面(如保存和更新)将发出redirect
以避免此缓存。只需为域类生成一个控制器,你就会看到我在说什么。