2017-09-26 69 views
2

我試圖修改微調器的步驟因子。我的意圖是邁向確切的數字。 因此,舉例來說,我的步驟因子是0.25,我寫入微調器的數字是0.8,它將跳轉到1.05,然後跳轉到0.55。但我的意圖正在逐步確定階段因素的確切因素。所以在這種情況下,它應該跳到0.75和1Primefaces微調器修改步驟因子

這是我現在的日曆代碼:

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

預先感謝您。

+1

允許保存不適合步長因子e.q.值用戶0.8? – lastresort

+0

不,這是不允許的。但在這種情況下,我只想調整微調而不是節省進度。 – xlamn

+0

然後讓微調器'readonly =「true」'並提供一個合適的初始值。 –

回答

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.選項: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); 
     } 
    } 
} 
+1

我個人喜歡在開始時也看到UI中的「四捨五入」,因此, d在轉換器的getterString(...)中,或者在轉換器的getAsString(...)中執行一些操作,然後就不需要通過ajax持續更新組件。 – Kukeltje

+0

我已經更新了getter和getAsString,正如你推薦的那樣。如果你說他不想通過ajax隨時更新,可能會有幫助,但我認爲他可能希望直接看到正確的值,而不是在表單提交和更新後看到正確的值,並添加一個註釋來解釋它。意見建議:) – lastresort

+0

謝謝!我修改了setter,現在它工作了! :) – xlamn