gpt4 book ai didi

javascript - 将实数值绑定(bind)到 Grails 域属性(Dojo 小部件发送的值)

转载 作者:搜寻专家 更新时间:2023-11-01 05:23:01 24 4
gpt4 key购买 nike

我正在使用 Dojo 1.9 和 Grails 2.3.9。

我在表单中使用的 Dojo NumberTextBox 小部件 - 将固定格式(JavaScript 基本格式)的实数值(例如:12.56)设置到 HTML 表单输入字段中(但根据浏览器显示/编辑它们语言环境,因此用户始终会看到格式正确的数字)。

另一方面,Grails 期望输入字段根据浏览器区域设置进行格式化。

这会导致转换不匹配,结果是当浏览器区域设置不是英语时,Grails 会丢失小数位,并且会错误地将记录保存到数据库中。

我试图通过实现自定义 ValueConverter 并将其注册到应用程序上下文中来覆盖 Grails 中的值转换。

浏览器发送的请求包含正确的真实值(“12.45”)

主要问题是我的转换器似乎根本没有被使用。

如何注册它来覆盖默认的双数据转换?


转换器:

package gefc.dojo.binding

import org.grails.databinding.converters.ValueConverter
import java.text.NumberFormat

/**
* Converter which allows that the doubles arrive
*/
class DojoDoubleValueConverter implements ValueConverter {

NumberFormat fmt

DojoDoubleValueConverter() {
// The number format sent by Dojo components
// English locale for the decimal separator
fmt = NumberFormat.getInstance(Locale.ENGLISH);
// no grouping
fmt.setGroupingUsed(false);
}

boolean canConvert(value) { value instanceof String }

def convert(value) {
Number n = fmt.parse(value)
return n.doubleValue()
}

Class<?> getTargetType() {
return Double.class
}
}

我在应用上下文中的注册(resources.groovy)

beans = {
// Dojo components send real values in a fixed, ISO format, while Grails
// expects them to be formatted according to client/browser locale
// So we need to override real value conversions
doubleConverter gefc.dojo.binding.DojoDoubleValueConverter
}

最佳答案

此问题已在 Grails 2.4+ 中修复

我在使用 Grails 2.3.8 的 Long 和 Integer 转换器时遇到了类似的问题。 Grails 使用 LocaleAwareNumberConverter 将字符串如“123abc”转换为“123”。所以我定义了自己的转换器并覆盖了 resources.groovy 中的 bean 定义

beans = {
"defaultGrailsjava.lang.LongConverter"(LongValueConverter)
"defaultGrailsjava.lang.IntegerConverter"(IntegerValueConverter)
}

class LongValueConverter implements ValueConverter {


public LongValueConverter() {
}

boolean canConvert(value) {
value instanceof String
}

def convert(value) {
return value?.toLong()
}

Class<?> getTargetType() {
return Long.class
}
}

关于javascript - 将实数值绑定(bind)到 Grails 域属性(Dojo 小部件发送的值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com