2011-02-13 72 views
3

在更新模型階段,el-1.0中存在一個bug,它使用jsf 1.1將BigDecimal轉換爲double,然後轉換回BigDecimal。這發生在ELSupport.java - > coerceToNumber類中,並在el-impl-2.1.2-b03中修復。最終的結果是,如果用戶輸入54.93,那麼在updateModel階段出現時,結果爲54.92999999 ...。jsf 1.1中的BigDecimal舍入

假設我沒有升級到el-2.1.2-b03的選項,但仍然必須保證我的計算的準確性和我發送給後端的內容。什麼是最好的四捨五入策略?當我在updateModel階段在支持bean中調用setter方法時,我正在考慮簡單地將scale設置爲2,並使用舍入策略ROUND_HALF_EVEN。

有沒有更好的解決方案?

+0

儘管您的問題是有效的,但我確實希望補充一點,JSF本身是規範而不是產品。所以JSF(1.1)沒有ELSupport.java,但是一個特定的實現(例如Mojarra)可能有。 – 2011-02-13 13:22:39

回答

1

在JSF 1.1中沒有解決方案。這兩個工作變通是:

  1. 綁定到一個字符串,並通過調用新的BigDecimal(字符串)轉換爲BigDecimal;

  2. 繼續綁定到BigDecimal,但附加了一個ValueChangeListener,您可以在FacesContext上調用renderResponse之前在數據模型中手動設置Value。您必須通過調用renderResponse來跳過更新模型階段,否則這將不起作用。