正如我所說的有幾個選項,我期望在我的答案中的價值是雙倍的。如果你有不止一個微調器,我建議使用轉換器,因爲你可以將它添加到每個微調器。
注意:如果您想在微調框更改後立即看到正確的值,您只需要添加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.選項:Modifiy 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);
}
}
}
允許保存不適合步長因子e.q.值用戶0.8? – lastresort
不,這是不允許的。但在這種情況下,我只想調整微調而不是節省進度。 – xlamn
然後讓微調器'readonly =「true」'並提供一個合適的初始值。 –