【问题标题】:List updated when a row was insert/updated in DB在数据库中插入/更新行时更新列表
【发布时间】:2014-06-12 19:49:10
【问题描述】:

我正在使用 java/wicket,我需要开发一个实时显示从 clients_request 表到达的新请求到页面列表中的功能。

我使用每秒单击一个按钮的脚本来实现此功能 查询 bd 然后重新加载所有表格内容。

有什么方法可以观察 bd 并仅在此表发生新更改时重新加载页面?

【问题讨论】:

    标签: java javascript html wicket


    【解决方案1】:

    如果您希望服务器处理更新(推送而不是拉取),您可以使用WebSockets,如下所示:http://wicketinaction.com/2012/07/wicket-6-native-websockets/

    【讨论】:

      【解决方案2】:

      与其以编程方式单击按钮,不如至少将其更改为使用AjaxSelfUpdatingTimerBehavior

      【讨论】:

        【解决方案3】:

        我们有一个具有类似功能的特性。我们所做的是一个相当复杂的解决方案,所以我不会告诉你所有的细节,而只是概述它,如果你认为这是你正在寻找的东西,我会修改答案并提供完整的解释。

        首先,我们以这种方式解决此问题,因为轮询在我们的情况下不起作用,据我所知,在您的情况下也不起作用。

        我们所做的是对映射到页面外部的处理程序的特殊 URL 进行异步调用。这很重要:如果它在页面内部(例如页面上的行为或组件),那么在调用期间页面将被锁定,用户无法与页面上的其他组件交互。

        我们实现异步调用的方式是通过一些 javascript,它会在页面加载后立即向该处理程序的 URL 发出 ajax 请求。在调用中,我们包含一些关于我们正在等待什么数据以及回调 URL 是什么的信息。

        然后,处理程序只需等待会触发重新渲染相关组件的事件(换句话说,它会保留请求)。

        当一个事件发生时,我们返回一个 ajax 响应,其中包含一些要评估的 javascript,这会发出另一个 ajax 请求;这一次,URL 指向了一些会重新渲染组件的行为。然后,该行为会重新呈现组件并评估一些 javascript 以再次调用等待的 URL。就这样继续下去,直到循环中的某个环节被破坏。

        如果这听起来对您有用,请发表评论。我很乐意提供有关如何完成所有这些的更多详细信息。

        【讨论】:

        • 对于一些简单的事情来说,这听起来像是一个非常复杂的解决方法。你能说出为什么投票对你不起作用吗? (以及你如何投票?)
        • 因为没有办法可靠地预先确定一个人可以等待多长时间直到数据发生下一次更新,并且更新频率可以从每秒多次更新到每小时一次,这更多可能是这样。因此,如果我们在较短的时间间隔内进行轮询,我们会给服务器带来不必要的负载,如果我们在较长的时间间隔内进行 - 我们不会在数据可用时立即显示数据(这是至关重要的)。
        • 啊,我明白了。你已经实现了“长拉”。
        猜你喜欢
        • 1970-01-01
        • 2020-05-30
        • 2011-06-07
        • 2016-09-30
        • 2018-02-09
        • 2021-12-17
        • 2021-06-22
        • 2011-02-16
        • 1970-01-01
        相关资源
        最近更新 更多