Primefaces Spinner修改的步长因子

时间:2017-09-26 08:16:08

标签: jsf primefaces spinner

我正在尝试稍微修改微调器的步长因子。我的目的是踩到确切的数字。 所以例如我的步长因子是0.25,我在旋转器中写入的数字是0.8,它将向前跳到1.05并向后跳到0.55。但我的目的是踩到步骤因素的确切因素。所以在这种情况下它应该跳到0.75和1。

这是我现在获得的日历的代码:

<prime:spinner id="inputHoursMonday"
value="#{attendance.value}" size="5"
max="#{bean.hoursMaxValue}" stepFactor="0.25"
min="0"
disabled="#{attendance.hoursBookedForAttendance}"/>

提前谢谢。

1 个答案:

答案 0 :(得分:0)

正如我所说,有一些选择,我希望在我的答案中价值是双倍的。如果您有多个微调器,我建议使用转换器,因为您可以将其添加到每个微调器。

注意:如果要在微调器更改后立即查看正确的值,则只需添加p:ajax。如果可以等到表单提交并更新,则不需要添加ajax。

<强> 1。选项:倾听者

html:

<prime:spinner value="#{bean.value}" max="#{bean.hoursMaxValue}"><p:ajax Listener="#{bean.valueChangeEvent}" update="@this"/></prime:spinner>

豆:

public void valueChangeListener(AjaxBehaviorEvent event){
   value = (double)Math.round(value*4)/4;
}

<强> 2。选项:修改setter和getter

HTML:

<prime:spinner value="#{bean.value}"><p:ajax update="@this"/></prime:spinner>

豆:

public double getValue(){
  return (double)Math.round(value*4)/4;
}

public void setValue(double value){
   this.value = (double)Math.round(value*4)/4;
}

第3。选项:转换器

注意:如果使用转换器,则无需修改bean中的任何内容。

HTML:

<prime:spinner value="#{bean.value}" converter="SpinnerConverter"><p:ajax update="@this"/></prime:spinner>

转换器:

@FacesConverter("SpinnerConverter")
public class SpinnerConverter implements Converter, Serializable {

    private static final long serialVersionUID = 1L;

    public SpinnerConverter() {
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        try {           
            Double doubleValue = Double.parseDouble(value);     
            return String.valueOf((double)Math.round(doubleValue*4)/4);
        } catch (Exception ex) {
            throw new ConverterException(ex);
        }
    }

    @Override
    public Double getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            Double doubleValue = Double.parseDouble(value);         
            return (double)Math.round(doubleValue*4)/4;
        }
        catch (Exception ex) {
            throw new ConverterException(ex);
        }
    }
}