你可以制作一个 TextField接受 , 和 。作为小数点分隔符?
在 Wicket 应用程序中,我有一个十进制数字文本字段:
TextField<BigDecimal> f =
new TextField<BigDecimal>("f", new PropertyModel<BigDecimal>(model, "share"));
我希望它始终接受两者。 (点)和 , (逗号)作为小数点分隔符(无论浏览器的区域设置如何)。
为了显示该值,使用会话的区域设置[在我们的例子中被迫为“fi”(->逗号)],但在这里我感兴趣的是该字段接受什么 作为输入。
我的问题是,我是否必须将字段更改为 TextField
,并手动转换为域对象的类型 (BigDecimal)?或者是否有某种方法可以使用 TextField
(例如允许使用 Wicket 的 MinimumValidator 或 RangeValidator),并且仍然让它接受两个小数分隔符?
In a Wicket app, I have a decimal number text field:
TextField<BigDecimal> f =
new TextField<BigDecimal>("f", new PropertyModel<BigDecimal>(model, "share"));
I want it to always accept both . (dot) and , (comma) as decimal separator (regardless of browser's locale settings).
For showing the value, session's locale is used [which in our case is forced to be "fi" (-> comma)], but here I'm interested in what the field accepts as input.
My question is, do I have to change the field to TextField<String>
, and convert to domain object's type (BigDecimal) manually? Or is there some way to use TextField<BigDecimal>
(which allows e.g. making use of Wicket's MinimumValidator or RangeValidator), and still have it accept both decimal separators?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
感谢 @bert 的评论和《Wicket in Action》一书,我找到了一种有效的方法。在Application类中为BigDecimals指定一个自定义转换器:
并且在自定义转换器中,需要重写
convertToObject
。 注意:这足以满足我们的需求;考虑您的要求并根据需要进行调整!编辑:题外话,但我也想记录一下。我们需要我们的应用程序支持 4 位小数,而我们的自定义 BigDecimal 转换器也很好地解决了这个问题。
进行此自定义后,像 2.0005 这样的十进制数将显示为 2.0005,而不是 2。
Thanks to @bert's comment, and the Wicket in Action book, I found an approach that works. In the Application class specify a custom converter for BigDecimals:
And in the custom converter,
convertToObject
needs to be overridden. NB: this is sufficient for our needs; think about your requirements and adapt as needed!Edit: Offtopic, but I want to document this too. We needed our app to support a scale of 4 decimal places, and our custom BigDecimal converter nicely solves that problem too.
After this customisation, a decimal number like 2.0005 will be shown as 2.0005 instead of 2.