我正在尝试稍微修改旋转器的步骤因子。我的目的是踏上确切的数字。因此,例如,我的步骤因子为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}"/>
预先感谢您。
正如我所说的一些选择,我希望该值是我的答案的双倍。如果您有多个旋转器,我建议使用转换器,因为您可以将其添加到每个旋转器中。
注意:如果要在更改旋转器后立即查看正确的值,则只需添加p:ajax。如果可以等到表单提交和更新您不需要添加Ajax。
1。选项:侦听器
html:
<prime:spinner value="#{bean.value}" max="#{bean.hoursMaxValue}"><p:ajax Listener="#{bean.valueChangeEvent}" update="@this"/></prime:spinner>
bean:
public void valueChangeListener(AjaxBehaviorEvent event){
value = (double)Math.round(value*4)/4;
}
2。选项:修改设置器和Getter
html:
<prime:spinner value="#{bean.value}"><p:ajax update="@this"/></prime:spinner>
bean:
public double getValue(){
return (double)Math.round(value*4)/4;
}
public void setValue(double value){
this.value = (double)Math.round(value*4)/4;
}
3。选项:转换器
注意:如果使用转换器,则不需要修改任何内容。
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);
}
}
}