SpEL (@NumberFormat) не работает - PullRequest
       19

SpEL (@NumberFormat) не работает

4 голосов
/ 24 августа 2011

---- 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 Ответ

5 голосов
/ 24 августа 2011

С @NumberFormat документы :

Объявляет, что поле должно быть отформатировано как число.Поддерживает форматирование по стилю или пользовательской строке шаблона. Может применяться к любому 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);
}

Это означает, что отсутствуют классы Atomic * из параллельного API, а также все пользовательские реализации Number из каркасов, таких как Commons /Lang и т. Д.

Обновление: (см. Комментарии) также необходимо добавить <mvc:annotation-driven> в ваш context.xml.

...