我正在尝试稍微修改微调器的步长因子。我的目的是踩到确切的数字。 所以例如我的步长因子是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}"/>
提前谢谢。
答案 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);
}
}
}