Как разобрать BigDecimal в контроллере Grails с учетом текущей локали пользователя?

Я хочу сохранить несколько денежных значений в приложении 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, поскольку он понимает, что десятичный разделитель для испанского числа равен , и . разделитель тысяч.

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


person Sergio del Amo    schedule 28.02.2012    source источник
comment
вы уже получили решение? пожалуйста, поделитесь своим решением.   -  person devbd    schedule 09.04.2020
comment
у меня такая же проблема с текущей локалью De в Grails 3.1.7   -  person devbd    schedule 09.04.2020


Ответы (1)


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

person Visionary Software Solutions    schedule 03.03.2012