2015-06-30 2 views
1

Я использую Spring MVC (4.1.6.RELEASE), с Thymeleaf (2.1.4.RELEASE). Класс My Entity имеет процентное поле, сохраненное как float.Spring MVC @NumberFormat Percent with Decimals

@Entity 
@Table(name="loans") 
public class Loan { 
    private float percentage; 
    ... 

    @NumberFormat(style=NumberFormat.Style.PERCENT) 
    @Column(name="percentage") 
    public float getPercentage() { 
     return percentage; 
    } 
    public void setPercentage(float percentage) { 
     this.percentage = percentage; 
    } 
    ... 
} 

В моем представлении используется диалект Тимелеаф Весна, который связывает этот компонент с формой.

<form th:object="${loan}" th:action="@{/form-handler}"> 
    <input type="text" th:field="*{percentage}" placeholder="e.g. 1.5%" /> 
    <input type="submit" /> 
</form> 

Форма связывания прекращается при подаче. Входное значение «12.675%» привязано к компоненту и сохраняется в db как «0.12675», но при отображении в форме редактирования. Весна @NumberFormat аннотации автоматически округляется до 13% при использовании NumberFormat.Style.PERCENT. Я хочу показать дробные процентные пункты, т. Е. «12.675%».

Я думал о написании отдельного геттера на моей Entity (например, getPercentFormatted), но тогда поле th:field="*{percentFormatted} не привязывалось бы должным образом в моем контроллере. Я полагаю, что я мог бы написать дополнительный сеттер, который разделил бы на 100 и установил свойство, но мне не нравится этот подход. Любой совет?

ответ

0

Попробуйте добавить в @NumberFormat атрибут pattern с соответствующим рисунком

От http://docs.spring.io/autorepo/docs/spring/4.0.9.RELEASE/javadoc-api/org/springframework/format/annotation/NumberFormat.html

Для пользовательского форматирования установите шаблон() атрибут быть число шаблон, например #, # ## ##..

Каждый атрибут является взаимоисключающим, поэтому только один атрибут для каждого экземпляра аннотации (самый удобный для вашего форматирования ). Когда атрибут pattern указан, он имеет приоритет над атрибутом style. Если атрибуты аннотации не заданы, применяемый по умолчанию формат основан на стиле с типом NumberFormat.Style.NUMBER.

+0

Это не сработает, потому что вы также должны умножить значение свойства на 100, чтобы представить 0.12675 как 12.675%. Java предлагает 'NumberFormat.getPercentInstance()', который делает это, и включает в себя параметры для десятичной точности, но '@ NumberFormat' не включает атрибуты, которые могут управлять этими настройками. –

Смежные вопросы