BigDecimal округление в JSF 1.1 - PullRequest
       6

BigDecimal округление в JSF 1.1

3 голосов
/ 13 февраля 2011

В el-1.0 есть ошибка, которую использует jsf 1.1, которая преобразует BigDecimal в удвоенное и затем обратно в BigDecimal во время фазы обновления модели.Это происходит в классе ELSupport.java -> coerceToNumber и было исправлено в el-impl-2.1.2-b03.Конечным результатом является то, что если пользователь вводит 54,93, то это приводит к 54,92999999 ... когда происходит фаза updateModel.

Предположим, что у меня нет возможности перейти на el-2.1.2-b03, новсе еще должен гарантировать точность моих расчетов и того, что я посылаю бэкэнду.Какую стратегию округления лучше всего использовать?Я думал о том, чтобы просто установить шкалу в 2 с помощью стратегии округления ROUND_HALF_EVEN всякий раз, когда вызывается метод сеттера в моем компоненте поддержки на этапе updateModel.

Есть ли лучшее решение?

1 Ответ

1 голос
/ 13 апреля 2011

В JSF 1.1 для этого нет решения. Два обходных пути:

  1. Привязка к строке и преобразование в BigDecimal путем вызова нового BigDecimal (string);

  2. Продолжайте связывать с BigDecimal, но присоединяйте ValueChangeListener, где вы можете вручную установить значение в своей модели данных до вызова renderResponse для FacesContext. Вы должны пропустить этап обновления модели, вызвав renderResponse, иначе это не будет работать.

...