【问题标题】:Groovy/Grails Float value and HTML5 number inputGroovy/Grails 浮点值和 HTML5 数字输入
【发布时间】:2019-11-28 02:58:07
【问题描述】:

在 Groovy/Grails 2.0 中,我有一个带有 Float 变量的域(例如 Float weight = 25.28)。当 Grails 生成带有相应数字输入字段的表单时,验证会抱怨 25.28 值并且只会接受一个 int 值。有人可以说明这是怎么回事吗? 提前致谢。

编辑: 在 Gails 域对象中(为了论证,Double 和 BigDecimal):

   Double weight = 350.26;
   BigDecimal width = 86.1;

生成的html:

<input id="weight" type="number" value="350.26" required="" name="weight">
<input id="width" type="number" value="86.1" required="" name="width">

... 我们的 FF 7 对这些数值很好,Chrome 给了我“无效值”并且只接受整数。 知道我缺少什么吗?

【问题讨论】:

  • 您是否已经尝试在 HTML 中用逗号替换小数点分隔符?
  • 正如@MarijnBouma 建议的那样,某些语言环境在解析时使用逗号代替小数点(因为 html 输入值作为字符串提交),可能需要仔细检查。跨度>
  • @vector:你最后在这里做了什么?你是如何解决这个问题的?我在使用 BigDecimal 时遇到了类似的问题,即使我在域类的约束闭包中设置了适当的比例和最小/最大值并重新生成 gsps,我也无法让编辑表单接受十进制值。
  • jlpp... 最终设置了步长值,如 step="0.001" 或 step="1" 等。
  • @vector:我会把它放到下一个“我”的答案中?

标签: html grails


【解决方案1】:

如果您使用 'grails generate-all' _form.gsp 文件,则更新生成的 _form.gsp 输入元素以添加 step="0.001" 或 step="0.1" 或 step="any" 等。

http://code.google.com/p/chromium/issues/detail?id=44116

将此更新更新到所有生成的 _form.gsp 文件中的一种方法是运行“grails install-templates”,然后编辑 src/templates/scaffolding/renderEditor.template renderNumberEditor 方法并将 step="any" 添加到每个

【讨论】:

    【解决方案2】:

    遇到了同样的问题。正如 jlpp 所说,通过编辑生成的 _form.gsp 视图为我解决了这个问题,但是将输入的标记更改为:

    <input id="weight" type="number decimal" value="350.26" required="" name="weight">
    <input id="width" type="number decimal" value="86.1" required="" name="width">
    

    注意 type="number decimal" 以在浏览器验证中添加小数支持。 更多的是浏览器问题而不是 grails 问题。 干杯!

    【讨论】:

      【解决方案3】:

      您应该在您的应用中设置语言环境。您的服务器的默认语言环境可能与您的客户端不同。不管你是对的,grails 应该处理这个问题。

      这是我的解决方法:将其放入您的 Bootstrap.groovy:

      Locale.setDefault(Locale.GERMAN);
      

      在打印到 GUI 时始终使用formatNumber

      ${formatNumber(number:float, locale: Locale.GERMAN, format:'##0.00')}       
      

      它将使用适当的小数分隔符。当您在控制器中并且没有命令对象时,您需要自己解析值。因此:

      DecimalFormat decimalFormat = DecimalFormat.instance;
      servicePrice.price = decimalFormat.parse(params.price);
      

      当您使用命令对象时,您不需要这样做。

      【讨论】:

      【解决方案4】:

      您可以在input 标签中使用step="any"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多