如何解决你能做一个TextField吗同时接受和作为小数点分隔符?
感谢@bert的评论以及《 Wicket in Action》 一书,我找到了一种 行之有效 的方法。在Application类中,为BigDecimals指定一个自定义转换器:
@Override
protected IConverterLocator newConverterLocator() {
ConverterLocator converterLocator = new ConverterLocator();
converterLocator.set(BigDecimal.class, new CustomBigDecimalConverter());
return converterLocator;
}
并且在自定义转换器中,convertToObject
需要被覆盖。 :这足以满足 我们的 需求;考虑您的要求并根据需要进行调整!
public class CustomBigDecimalConverter extends BigDecimalConverter {
@Override
public BigDecimal convertToObject(String value, Locale locale) {
// NB: this isn't universal & your mileage problably varies!
// (Specifically, this breaks if '.' is used as thousands separator)
if ("fi".equals(locale.getLanguage())) {
value = value.replace('.', ',');
}
return super.convertToObject(value, locale);
}
}
:Offtopic,但我也想对此进行记录。我们需要我们的应用程序支持小数点后4位的小数位数,而我们自定义的BigDecimal转换器也可以很好地解决该问题。
@Override
public String convertToString(Object value, Locale locale) {
NumberFormat fmt = getNumberFormat(locale);
fmt.setMaximumFractionDigits(4); // By default this is 3.
return fmt.format(value);
}
进行此自定义后,十进制数字(如2.0005)将显示为2.0005,而不是2。
解决方法
在Wicket应用中,我有一个十进制数字文本字段:
TextField<BigDecimal> f =
new TextField<BigDecimal>("f",new PropertyModel<BigDecimal>(model,"share"));
我希望它总是接受两者。(点)和,(逗号)作为小数点分隔符( 无论 浏览器的语言环境设置如何)。
为了 显示 该值,使用了会话的语言环境[在我们的例子中,该语言环境被强制为“ fi”(->逗号)],但是在这里,我对字段 接受 输入内容感兴趣。
我的问题是,我是否必须将字段更改为TextField<String>
,并手动将其转换为域对象的类型(BigDecimal)?还是有某种使用方法TextField<BigDecimal>
(例如允许使用Wicket的MinimumValidator或RangeValidator),并且仍然接受两个十进制分隔符?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。