Primefaces滑块<p:slider>:检测滑动

时间:2018-03-21 13:49:18

标签: ajax jsf primefaces

是否有可能在滑动时检测到事件&#34;在primefaces滑块?

我有一个民意调查(每3秒更新一次滑块)来更新滑块&#39;值(因为多个客户端可以使用幻灯片)。

当我滑动并进行定期ajax调用时(<p:poll>),滑块返回其初始位置。这种行为是可以理解的,因为表单本身是刷新的。

我需要避免这种情况:当我滑动时,我希望轮询停止。当我停止滑动ajax事件&#34; slideEnd&#34;叫做。在这种情况下,我会正常返回轮询刷新过程。

这可能吗?我需要什么?

编辑:我发现了<p:slider>的onSlide和onSlideStart属性。我使用了类似的东西:

<p:slider for="porta2005" minValue="0.0" maxValue="100.0" step="1" styleClass="width-100" onSlide="#{dimmerBean.slideStart()}">
    <p:ajax event="slideEnd" listener="#{dimmerBean.mudaTensao2005}" update="tensao2005"/>
</p:slider>

但是在bean内的每个轮询请求中调用方法slideStart(),不仅在我有效滑动时。像这样在onSlide中调用bean方法是错误的吗?

我正在使用Primefaces 6.1。

1 个答案:

答案 0 :(得分:3)

onSlideonSlideStartonSlideEnd是客户端回调。因此,如果将一个支持bean方法放在这些属性中,它将在渲染期间调用,而不是在实际事件期间调用。

来自文档:

  

名称默认类型说明
  onSlide null在滑动期间执行的字符串客户端回调

略低于此:

  

客户端回调
  Slider提供三个回调来挂钩你的自定义javascript,onSlideStart,onSlide和   onSlideEnd。所有这些回调都接收两个参数; slide事件和包含的ui对象   有关该事件的信息。

您可以使用轮询窗口小部件功能停止轮询。假设您的p:poll widgetVar属性为myPoll,您可以在滑动过程中将其暂停,如图所示。

<p:slider for="porta2005" minValue="0.0" maxValue="100.0" step="1" styleClass="width-100" 
          onSlideStart="PF('myPoll').stop()" onSlideEnd="PF('myPoll').start()">