任何人都可以解释为什么(如何)xtype:numberfield值将自动更正(更改)如果提供的值超过16位。 例如:
在我的组件jsp页面中获取值后,如下所示渲染后我的页面会产生如下所示
NumberFieldTestValue:<%= properties.get("numberfieldname","") %>
结果如下
NumberFieldTestValue: 2.2222222222222223e+22
答案 0 :(得分:3)
此行为是由于对话框行为是在JavaScript中实现的。您遇到问题的数字无法在其中表示。
该语言符合ECMASCRIPT 5.1规范。
所有正负整数,其幅度不大 数字类型
中可表示超过2 ^ 53
2222222222222222222222
的基数2对数约为70,这意味着该数字超过了最大值。因此你的问题。
总而言之,如果您在浏览器中的普通JS控制台中检查您的示例,则会显示相同的行为,因此这不是CQ问题。
为避免这种情况,您可以使用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"/>
另一个选择是更改配置背后的逻辑,并使用一些不同的单位(如果适用)。例如,如果值2222222222222222222222是克数(物体/物质的重量),则以公吨(而不是在许多情况下)读取它是完全合理的。作者可能没有输入如此庞大的数字。
如果你走这条路,你需要格外小心。