我们的用户从外部站点返回到我们的网站,当用户离开我们的站点时,该 URL 被传递到外部站点。返回我们的站点涉及到持久化到应用程序数据存储区的状态更新。
我在返回我们的网站时实施了一项检查,以防止对我们的数据存储进行多次写入,从而使操作具有幂等性。
一个典型的事件顺序是:
- 第一篇post到我们的登陆网页(网页实例1正在构建中)
- 第一篇文章通过检查(之前未处理的数据)
- 数据持久化开始(仍在网页构造函数中)
- 第二篇文章到我们的登陆网页(网页实例 2 正在构建),它与第一篇文章在同一个会话和浏览器窗口中
- 第二个帖子检查失败(数据已经或正在处理)
- 网页实例 2 构造函数完成(对数据存储没有持久性)并向用户提供 Web 响应
- 网页实例 1 构造函数完成(在持久化到数据存储之后)
- 用户在浏览器中看不到页面实例 1。
最终结果是,即使第二个帖子是在第一个帖子之后发布的,第二个帖子对用户来说“完成”得更快,并且用户的 Web 浏览器显示页面的实例 2,而不是实例 1。
我的问题是:
- 有什么办法可以让第一个数据存储处理页面实例显示给用户(从而“扔掉”第二个页面实例)?
- 如果是这样,不使用 AJAX 可以做到这一点吗?
我将不胜感激任何帮助。
我的开发环境
- 网络框架:Wicket 1.5.7
- 爪哇:1.6.0_33;Java HotSpot(TM) 客户端虚拟机 20.8-b03
- 网络服务器系统:Google App Engine for Java 1.6.6 版
- 操作系统:Microsoft Windows XP Home Edition 2002 SP3(在 x86 上运行的 5.1 版;Cp1252;en_GB)
- IDE:NetBeans IDE 7.1.2(内部版本 201204101705)