私はいくつかのオプションがあると言いましたが、私の答えでは値が2倍になると思います。複数のスピナーを使用している場合は、コンバーターを使用することをお勧めします。なぜなら、すべてのスピナーにそれを追加できるからです。
メモ:スピナーが変更された直後に正しい値を表示するには、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セッターと
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.オプション:コンバータ
注:あなたがコンバータを使用する場合は、豆には何も変更する必要はありません。
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 "'にして、適切な初期値を指定します。 –