xtype:numberfield值将自动更正(更改)超过16位数值

时间:2013-10-03 12:29:21

标签: extjs cq5 aem

任何人都可以解释为什么(如何)xtype:numberfield值将自动更正(更改)如果提供的值超过16位。 例如:

  1. 22222222222222222更改为22222222222222224
  2. 222222222222222222更改为222222222222222200
  3. 2222222222222222222更改为2222222222222222300
  4. 22222222222222222222更改为22222222222222220000
  5. 222222222222222222222更改为222222222222222230000
  6. 2222222222222222222222更改为2.2222222222222222e + 21
  7. 22222222222222222222222更改为2.2222222222222223e + 22
  8. 在我的组件jsp页面中获取值后,如下所示渲染后我的页面会产生如下所示 NumberFieldTestValue:<%= properties.get("numberfieldname","") %> 结果如下

    NumberFieldTestValue: 2.2222222222222223e+22
    

1 个答案:

答案 0 :(得分:3)

问题

此行为是由于对话框行为是在JavaScript中实现的。您遇到问题的数字无法在其中表示。

该语言符合ECMASCRIPT 5.1规范。

引用Number type description

  

所有正负整数,其幅度不大   数字类型

中可表示超过2 ^ 53

2222222222222222222222的基数2对数约为70,这​​意味着该数字超过了最大值。因此你的问题。

总而言之,如果您在浏览器中的普通JS控制台中检查您的示例,则会显示相同的行为,因此这不是CQ问题。

解决方案1 ​​ - 使用其他类型

为避免这种情况,您可以使用xtype="textfield"并针对正则表达式对其进行验证,以查看它是否仅包含数字。然后你必须确保使用能够在后端保存这些数字的类型(如BigInteger)。

该字段可能如下所示:

<numberOfSandGrains
  jcr:primaryType="cq:Widget"
  fieldLabel="Number of grains of sand at the beach"
  name="./grainsCount"
  regex="/\d+/"
  regexText="Please enter a numeric value."
  xtype="textfield"/>

解决方案2 - 更改比例

另一个选择是更改配置背后的逻辑,并使用一些不同的单位(如果适用)。例如,如果值2222222222222222222222是克数(物体/物质的重量),则以公吨(而不是在许多情况下)读取它是完全合理的。作者可能没有输入如此庞大的数字。

如果你走这条路,你需要格外小心。