我使用的是Spring MVC (4.3.3.RELEASE)。我的实体类有一个表单字段,我希望以spring的形式显示该字段: BigDecimal
<form:input path="number" />as 1.000.000,11
我在字段上尝试了@NumberFormat(pattern = "#.###,##"),但出现了以下异常:
org.springframework.core.convert.ConversionFailedException:无法将值‘100000000000.22’的类型@org.springframework.format.annotation.NumberFormat @javax.validation.constraints.NotNull java.math.BigDecimal转换为类型java.lang.String;嵌套异常为java.lang.IllegalArgumentException:格式错误的模式"#.###,##“
当我尝试查看表单时。
我的实体类是:
@Entity
@Table(name="test")
public class Test {
private BigDecimal number;
...
@NumberFormat(pattern = "#.###,##")
@Column(name="number")
public BigDecimal getNumber() {
return number;
}
public void setNumber(BigDecimal number) {
this.number = number;
}
...
}有没有方法以这个模式= "#.###,##“的形式查看?
发布于 2019-07-05 16:41:24
我的解决方案是:
public class BigDecimalEditor extends PropertyEditorSupport {
private static Logger logger = Logger.getLogger(BigDecimalEditor.class);
@Override
public String getAsText() {
String s = null;
if (getValue() != null) {
BigDecimal bd = (BigDecimal) getValue();
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
df.setParseBigDecimal(true);
s = df.format(bd);
}
return s;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
df.setParseBigDecimal(true);
BigDecimal bd = null;
try {
bd = (BigDecimal) df.parseObject(text);
} catch (ParseException e) {
logger.error("setAsText error", e);
setValue(null);
}
setValue(bd);
}}
在@Controller类中
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(BigDecimal.class, new BigDecimalEditor());
}发布于 2019-06-26 21:35:44
我相信@NumberFormat只支持英语区域设置。这篇文章对另一种Use Different Locale for @NumberFormat in Spring有一个很好的答案
https://stackoverflow.com/questions/56769888
复制相似问题