Я использую 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 и установил свойство, но мне не нравится этот подход. Любой совет?
Это не сработает, потому что вы также должны умножить значение свойства на 100, чтобы представить 0.12675 как 12.675%. Java предлагает 'NumberFormat.getPercentInstance()', который делает это, и включает в себя параметры для десятичной точности, но '@ NumberFormat' не включает атрибуты, которые могут управлять этими настройками. –