【发布时间】:2011-07-11 09:27:22
【问题描述】:
在 Wicket 应用程序中,我有一个十进制数字文本字段:
TextField<BigDecimal> f =
new TextField<BigDecimal>("f", new PropertyModel<BigDecimal>(model, "share"));
我希望它始终接受两者。 (点)和 ,(逗号)作为小数分隔符(不管浏览器的区域设置)。
对于 显示 值,使用会话的语言环境 [在我们的例子中强制为“fi”(-> 逗号)],但这里我对字段 接受作为输入。
我的问题是,我是否必须将字段更改为TextField<String>,并手动转换为域对象的类型(BigDecimal)?或者有什么方法可以使用TextField<BigDecimal>(例如允许使用 Wicket 的 MinimumValidator 或 RangeValidator),并且仍然接受两个小数分隔符?
【问题讨论】:
-
我现在没有文档,但您可以在应用程序类中全局注册转换器。因此,您可以为 BigDecimal 注册自己的 Converter 实现并在其中接受这两种变体
-
@bert,谢谢!阅读 Wicket in Action(第 163 页),这可能确实是解决此问题的最佳方法……也可以考虑将其写为答案。
-
请注意:在某些语言环境中,两个字符可以出现在同一个数字中,即
.用于对千位进行分组,,作为小数分隔符。如果您想要一个通用数字解析器,请确保您的代码可以处理像32.519.100,28这样的数字。 -
@biziclop:是的,好点。 (在我们的例子中,我们不需要一个通用的解决方案,所以我们可以使用一些更简单的方法,比如我发布的答案。)
标签: java wicket bigdecimal decimal-point