Как проанализировать BigDecimal в контроллере Grails с учетом текущего языка пользователя? - PullRequest
3 голосов
/ 28 февраля 2012

Я хочу хранить несколько денежных значений в приложении Grails 2.0, используя BigDecimal.

У меня есть класс домена с полем BigDecimal

Invoice {
     BigDecimal amount 
}

Поле формы ввода GSP выглядит как следующий фрагмент кода

<div class="fieldcontain ${hasErrors(bean: invoiceInstance, field: 'amount', 'error')} required">

    <label for="amount">
        <g:message code="invoiceInstance.amount.label" default="Amount" />
        <span class="required-indicator">*</span>
    </label>
    <g:field type="number" name="amount" required="" value="${invoiceInstance.amount}"/>
</div>

Если я работаю на английском языке, все работает нормально. Пользователь вводит 100 в поле, и когда значение передается, 100,00 отправляется на сервер. Разбор контроллера выглядит так:

invoiceInstance.properties = params

и BigDecimal 100,00 для английского языка составляет 100 €, как и ожидалось

Проблема в том, что если пользователь меняет локаль на испанский и вводит 100 в поле. Строка 100.00 отправляется на сервер, но наборы синтаксического анализа составляют 10000, потому что она понимает десятичный разделитель для испанского числа, и. это разделитель тысяч.

Как мне избежать этой проблемы?

1 Ответ

0 голосов
/ 03 марта 2012

Может потребоваться проверить языковой стандарт пользователя перед анализом значения, проверив заголовок Accept-Language . Вместо наивного построения из params, вы, вероятно, создадите new BigDecimal со значением, переданным в Locale, на которое ссылается заголовок.

...