考虑当前用户Locale,如何在Grails控制器中解析BigDecimal?

时间:2012-02-28 17:20:17

标签: grails locale currency bigdecimal

我想使用BigDecimal在grails 2.0应用程序中存储多个货币值。

我有一个带有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 :(得分:0)

在检查Accept-Language header之前,您可能需要在解析值之前检查用户的语言环境。您可能会创建一个new BigDecimal,而不是从params天真地构造,而是在标题引用的Locale中传递值。