Javascript 控制瓦丁心跳

Javascript 控制瓦丁心跳,javascript,java,vaadin,vaadin7,Javascript,Java,Vaadin,Vaadin7,有没有一种方法可以控制何时停止向服务器发送心跳 我的要求是,当用户在文本框中键入内容或将鼠标指针悬停在UI上时,UI不会过期 当然,当用户在页面上执行某些活动时,我们可以使用一些java脚本黑客发送一些服务器请求,这将最终防止UI过期 但我更希望通过心跳来控制它,如果用户真的远离UI,那么在超时后停止发送心跳,但在用户输入文本框或鼠标悬停时继续发送心跳(以定义的频率) 处理这个问题的最佳方法是什么?我知道,只要有用户输入,您就希望UI处于活动状态。如果用户空闲,用户界面应该被删除,而不是被心跳阻

有没有一种方法可以控制何时停止向服务器发送心跳

我的要求是,当用户在文本框中键入内容或将鼠标指针悬停在UI上时,UI不会过期

当然,当用户在页面上执行某些活动时,我们可以使用一些java脚本黑客发送一些服务器请求,这将最终防止UI过期

但我更希望通过心跳来控制它,如果用户真的远离UI,那么在超时后停止发送心跳,但在用户输入文本框或鼠标悬停时继续发送心跳(以定义的频率)


处理这个问题的最佳方法是什么?

我知道,只要有用户输入,您就希望UI处于活动状态。如果用户空闲,用户界面应该被删除,而不是被心跳阻塞

您可以通过禁用心跳机制来实现这一点。将参数
closeIdleSession
设置为
true
即可。 在web.xml文件中编写:

<servlet>
    ...
    <init-param>
        <param-name>closeIdleSessions</param-name>
        <param-value>true</param-value>
    </init-param>

...
封闭式隔离
真的
如果用户在指定的超时时间内未触发任何请求,则会话将无效。这样,您的UI在会话超时过期后被销毁。会话超时通过在web.xml中设置

<session-config>
    <session-timeout>60</session-timeout><!-- in minutes -->
</session-config>

60

通过在文本字段中添加一个
TextChangeListener
,键入将发送请求并自动刷新服务器超时。

UI是否应该过期?如果没有,那么您可以使用推送机制来防止UINo过期。如果用户完全不活动,我希望UI过期。前两行中的断言是绝对正确的,但所描述的解决方案不是我所期望的。在许多视图中都有许多文本框,为每个视图添加一个
TextChangeListener
,这是一种过分的做法。我只需要在心跳客户端API中加入一些钩子,如果UI上没有任何用户活动,请抑制心跳,这样UI就会自动过期。我相信这是可能的,因为心跳和在UI上检测用户活动都是Java脚本的事情。我承认,如果用户只是在控件上键入和悬停,而实际上没有向服务器提交任何表单输入,那么解决方案可能不适用于您。假设您的会话超时为60分钟,用户只需在UI上悬停并键入,但在此期间从未按enter键或任何按钮,他们最终将面临会话超时。但这真的是你的应用程序的场景吗?这是一个边缘场景。目前,用户似乎在键入一些难以填写的表单时出现会话超时。我明白了,如果您将文本字段默认设置为立即模式(setImmediate(true)),会怎么样?您可以使用文本字段的工厂方法轻松完成此操作。然后,每次用户离开文本字段的焦点时,都会向服务器发送一个请求。如果您将值更改侦听器附加到textfield,则该字段隐式地处于立即模式,您不必设置它。设置立即为true将在一定程度上起作用。但要求严格的QAS会像书呆子一样对其进行测试,比如当应用程序即将超时时,用户在文本框中键入内容,或者当鼠标悬停时,用户正在思考,但没有覆盖这些情况。那么,你是说我们没有任何选项可以连接到心跳Api并抑制或继续发送心跳,并以这种方式控制超时?