2011-02-13 75 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来跳过更新模型阶段,否则这将不起作用。