0

我有一个 Web 应用程序,它是前端控制器模式的实现,如下图所示。具体来说,我遵循了前端控制器模式的代码示例,如this question's answer中所述:

设计模式基于 Web 的应用程序

前控制器

我的 .jsp 页面之一出现更新问题。这个页面特别有一个弹出编辑器,它允许用户添加或删除外部数据库中数据集的链接。如果用户点击保存按钮,它会发送一个请求,该请求被前端控制器拦截。然后,在系统自己的数据库上执行保存或删除参考链接(多对多 ID 号)的正确操作。之后,应该重新加载页面,这会触发一个链接命令,该命令从两个数据库加载数据,然后重定向到基本上相同的页面,而不会弹出。

但是,由于某种我不理解的缓存形式,该页面没有重新加载。我已经尝试了所有我能找到的解决方案,以防止加载缓存的数据,从向 URL 添加唯一值,到在 jsp 页面上添加元标记,以防止它被缓存。我已经确认数据正在服务器端加载。一个简单的 F5 点击更新页面,就像它应该自动做的那样。

我还在弹出窗口上实现了一个 onClose 函数,它调用了 window.location.reload()。然而,这个调用会中断前端控制器,并停止它当前正在做的一切,以处理最新的请求。这会产生竞争条件,在前端控制器开始重新加载页面之前,有时可以插入/删除数据,有时则不能。

我应该排队吗?有充分的理由不这样做吗?Front 控制器的执行方法,还是类本身应该实现某种同步?

4

1 回答 1

0

您的弹出编辑器应放置在 iframe 内,以便在提交时不会重新加载窗口。从 iframe 发送的请求返回的响应应该触发 window.location.reload()。例如:

<html>
  <script type='text/javascript'>
    window.onload = function() {
      window.location.reload();
    };
  </script>
</html>

另一种选择是使用 Ajax 调用发送更新,然后在 Ajax 调用返回时重新加载页面。或者更好的是,在不重新加载但使用 Ajax 调用返回的 JSON 数据的情况下动态更新页面。

于 2014-07-10T10:12:21.687 回答