SpEL(@NumberFormat)无效

时间:2011-08-24 07:27:16

标签: java spring spring-mvc annotations spring-el

---- SampleVO

@NumberFormat(pattern = "###,##0")
private int money=100000;

-----控制器

@RequestMapping(value="/com/spelSample.do")
public String spelSample(SampleVO sampleVO,  Model model){

    model.addAttribute("sampleVO", sampleVO);

    return "sampleResult";
}

------- sampleResult.jsp

money: <spring:eval expression="sampleVO.money"/>

-----期望

money : 100,000

------但结果是

money : 100000

有什么问题? 我该怎么办?

1 个答案:

答案 0 :(得分:5)

来自the @NumberFormat docs

  

声明字段应格式化为数字。支持   按样式或自定义模式字符串格式化。 可以应用于任何   JDK java.lang.Number类型

您正在原始字段上使用它。显然,这不包括在内。使用Integer代替int

编辑:更确切地说,不是涵盖java.lang.Number的每个可能的子类。以下是NumberFormatAnnotationFormatterFactory的相关摘录:

public NumberFormatAnnotationFormatterFactory() {
    Set<Class<?>> rawFieldTypes = new HashSet<Class<?>>(7);
    rawFieldTypes.add(Short.class);
    rawFieldTypes.add(Integer.class);
    rawFieldTypes.add(Long.class);
    rawFieldTypes.add(Float.class);
    rawFieldTypes.add(Double.class);
    rawFieldTypes.add(BigDecimal.class);
    rawFieldTypes.add(BigInteger.class);
    this.fieldTypes = Collections.unmodifiableSet(rawFieldTypes);
}

这意味着缺少并发api中的Atomic *类,以及来自Commons / Lang等框架的所有自定义Number实现。

更新:(请参阅评论)您还需要将<mvc:annotation-driven>添加到您的context.xml。