我有一个Web应用程序,它是Front Controller Pattern的实现,如下图所示。具体来说,我遵循了前端控制器模式的代码示例,如该问题的答案中所述:
我的.jsp页面之一存在更新问题。该页面特别具有弹出编辑器,允许用户从外部数据库添加或删除指向数据集的链接。如果用户单击保存按钮,它将发送一个请求,该请求将被Front Controller拦截。然后,在系统自己的数据库上执行用于保存或删除参考链接(许多ID号)的正确操作。之后,应重新加载页面,这将触发链接的命令,该命令从两个数据库加载数据,然后重定向到基本上相同的页面,而没有弹出窗口。
但是,由于某种我不理解的缓存形式,因此无法重新加载该页面。我尝试了所有可能找到的解决方案,以防止加载缓存的数据,向URL添加唯一值,在jsp页上添加元标记以完全阻止缓存。我已经确认数据正在服务器端加载。只需按一下F5键即可自动更新页面。
我还在弹出窗口上实现了onClose函数,该函数调用window.location.reload()。但是,此调用会中断前端控制器,并停止当前正在执行的所有操作,以处理最新的请求。这会造成争用情况,在Front Controller开始重新加载页面之前,有时可以插入/删除数据,有时不能插入/删除数据。
我应该排队吗?有充分的理由不这样做吗?Front控制器的执行方法还是类本身应该实现某种同步?
您的弹出式编辑器应放置在iframe中,这样它在提交时就不会重新加载窗口。从iframe发送的请求返回的响应应触发window.location.reload()。例如:
<html>
<script type='text/javascript'>
window.onload = function() {
window.location.reload();
};
</script>
</html>
另一个选择是通过Ajax调用发送更新,然后在Ajax调用返回时重新加载页面。或者更好的方法是动态更新页面,而无需重新加载,而是使用Ajax调用返回的JSON数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句