我正在使用Spring MVC(4.3.3.3.release(。我的实体课程有一个我想以春季形式显示的大型字段:
<form:input path="number" />
AS 1.000.000,11
我在字段上尝试了@numberformat(pattern ="#。###,##"(,但我有以下例外:
'100000000000.22';嵌套异常是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;
}
...
}
是否有一种方法可以以表格查看此模式="#。###,##"?
我相信@numberformat仅支持英语语言环境。这篇文章有一个很好的答案,用于替代方案,在春季使用@numberformat的不同语言环境
我解决了:
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 class
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(BigDecimal.class, new BigDecimalEditor());
}