【发布时间】:2014-06-12 19:49:10
【问题描述】:
我正在使用 java/wicket,我需要开发一个实时显示从 clients_request 表到达的新请求到页面列表中的功能。
我使用每秒单击一个按钮的脚本来实现此功能 查询 bd 然后重新加载所有表格内容。
有什么方法可以观察 bd 并仅在此表发生新更改时重新加载页面?
【问题讨论】:
标签: java javascript html wicket
我正在使用 java/wicket,我需要开发一个实时显示从 clients_request 表到达的新请求到页面列表中的功能。
我使用每秒单击一个按钮的脚本来实现此功能 查询 bd 然后重新加载所有表格内容。
有什么方法可以观察 bd 并仅在此表发生新更改时重新加载页面?
【问题讨论】:
标签: java javascript html wicket
如果您希望服务器处理更新(推送而不是拉取),您可以使用WebSockets,如下所示:http://wicketinaction.com/2012/07/wicket-6-native-websockets/
【讨论】:
与其以编程方式单击按钮,不如至少将其更改为使用AjaxSelfUpdatingTimerBehavior
【讨论】:
我们有一个具有类似功能的特性。我们所做的是一个相当复杂的解决方案,所以我不会告诉你所有的细节,而只是概述它,如果你认为这是你正在寻找的东西,我会修改答案并提供完整的解释。
首先,我们以这种方式解决此问题,因为轮询在我们的情况下不起作用,据我所知,在您的情况下也不起作用。
我们所做的是对映射到页面外部的处理程序的特殊 URL 进行异步调用。这很重要:如果它在页面内部(例如页面上的行为或组件),那么在调用期间页面将被锁定,用户无法与页面上的其他组件交互。
我们实现异步调用的方式是通过一些 javascript,它会在页面加载后立即向该处理程序的 URL 发出 ajax 请求。在调用中,我们包含一些关于我们正在等待什么数据以及回调 URL 是什么的信息。
然后,处理程序只需等待会触发重新渲染相关组件的事件(换句话说,它会保留请求)。
当一个事件发生时,我们返回一个 ajax 响应,其中包含一些要评估的 javascript,这会发出另一个 ajax 请求;这一次,URL 指向了一些会重新渲染组件的行为。然后,该行为会重新呈现组件并评估一些 javascript 以再次调用等待的 URL。就这样继续下去,直到循环中的某个环节被破坏。
如果这听起来对您有用,请发表评论。我很乐意提供有关如何完成所有这些的更多详细信息。
【讨论】: