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

我正在使用带有Grails 2.3.9的Dojo 1.9.

Dojo NumberTextBox小部件 – 我在表单中使用 – 将固定格式(JavaScript基本格式)的实数值(例如:12.56)设置为HTML表单输入字段(但根据浏览器区域设置显示/编辑它们,所以用户总是看到格式正确的数字).

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

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

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

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

主要问题是我的转换器似乎根本没用过.

如何注册它以覆盖defaut Double数据转换?

转换器:

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
    }
}

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...