Primefaces范围滑块最大值和最小值

时间:2018-04-02 22:43:59

标签: validation events primefaces slider

我需要知道哪个元素是我从范围滑块中获得的值。我有以下代码:

<h:outputText id="displayValues" value="#{myBean.min} - #{myBean.max}"/>
<p:slider
  id="mySlider"
  for="min,max"
  display="displayValues"
  range="true"
  displayTemplate=" {min} - {max}" 
  minValue="#{myBean.value1}"  
  maxValue="#{myBean.value2}" >
  <p:ajax event="slideEnd" listener="#{simuladorBean.onSlideEnd}"/>
</p:slider>
<h:inputHidden id="min" value="#{myBean.min}"/>
<h:inputHidden id="max" value="#{myBean.max}" />

在带有event.getValue()的myBean中,我知道我移动的滑块的新值,但我需要知道这个新值是否来自最大或最小滑块。 有人可以帮我解决这个问题。

谢谢

2 个答案:

答案 0 :(得分:2)

通常,提交表单时,还会提交inputHidden max和min。但由于您在滑块上使用p:ajax,并且由于process的默认p:ajax@this,因此未提交inputHidden字段。如果您将p:ajax更改为

<p:ajax event="slideEnd" process="@this, min, max" listener="#{simuladorBean.onSlideEnd}"/>

(或者将整个xhtml块包装在容器中并处理它)

最小和最大 提交,在onSlideEnd中,您可以将事件中获得的值与最小值和最大值进行比较,并确定哪一个更改了。

另见

答案 1 :(得分:0)

我有类似的需求,我实现了这个简单的解决方案: 我创建了这个函数

function isMinOrMaxRangeFocus() {
                        if ($($('#sliderId .ui-slider-handle')[0]).hasClass('ui-state-focus')) return 'min';
                        if ($($('#sliderId .ui-slider-handle')[1]).hasClass('ui-state-focus')) return 'max';
                        return ('none');
                    }

在你可以在像这样的onstart上使用它之后:

<p:slider id="sliderId" for="sliderMin,sliderMax" range="true" >
                                        <p:ajax event="slideEnd" onstart="$('#whichSliderIs).val(isMinOrMaxRangeFocus());" process="@this,whichSliderIs,sliderMin,sliderMax" listener="#{myBean.myListener()}" />
                                    </p:slider>
                                    <h:inputHidden id="sliderMin" value="#{myBean.sliderMin}"/>
                                    <h:inputHidden id="sliderMax" value="#{myBean.sliderMax}"/>
                                    <h:inputText id="whichSliderIs" value="#{myBean.whichSliderIs}" style="display: none"/>

了解它很容易知道哪个值发生了变化!