【发布时间】:2015-12-17 11:03:57
【问题描述】:
什么问题:
在我的应用程序中,前端的数字始终以, 作为小数分隔符。当用户更改其语言环境并使用?lang=en_EN 参数编辑实体时,会出现错误绑定问题。发生的情况是,使用en_EN 语言环境,小数点分隔符是.,它在数据库中的输入11,00、1100 上产生价值,而不是11.00 - 涉及金钱的关键问题。
使用的软件:
Grails 2.3.8
Groovy 2.2.1
我想做的事:
在我的情况下,转换器中默认的“语言环境感知”方法非常有问题,我希望它们始终以相同的方式绑定,这应该是独立于语言环境的。
我已经尝试过的:
我发现默认情况下工作的原因是LocaleAwareNumberConverter,更具体地说是LocaleAwareBigDecimalConverter,所以我编写了一个简单的实现,它只使用一个语言环境(在本例中为GERMAN,因为它使用,作为小数分隔符)
@CompileStatic
class MyBigDecimalConverter extends LocaleAwareNumberConverter {
@Override
protected NumberFormat getNumberFormatter() {
NumberFormat.getInstance(Locale.GERMAN)
}
}
包含在resources.groovy:
myBigDecimalConverter com.company.converters.MyBigDecimalConverter
但这只是行不通。值仍使用LocaleAwareBigDecimalConverter 进行转换。
编辑:
我已将转换器更改为直接实现ValueConverter:
@CompileStatic
class MyBigDecimalConverter implements ValueConverter {
@Override
boolean canConvert(Object value) {
value instanceof String
}
@Override
Object convert(Object value) {
def numberFormatter = NumberFormat.getInstance(Locale.GERMAN)
numberFormatter.parse((String)value).asType(getTargetType())
}
@Override
Class<?> getTargetType() {
BigDecimal
}
}
而且这个转换器也不会被调用。我对resources.groovy没有做任何更改
【问题讨论】:
-
我今天没有时间检查(不工作),但是这个类似的问题有一个值得研究的答案(如果你还没有看到它):stackoverflow.com/questions/24274274/…
标签: grails data-binding