Spring 3 @NumberFormat 不适用于表单:输入标签
Posted
技术标签:
【中文标题】Spring 3 @NumberFormat 不适用于表单:输入标签【英文标题】:Spring 3 @NumberFormat not working with form:input Tag 【发布时间】:2013-08-29 15:25:41 【问题描述】:我有一个使用 <mvc:annotation-driven />
的 Spring 3 MVC 应用程序。无法让 java.lang.Double 属性在 <form:input>
标记中显示为货币。金额显示正确,但未应用格式。有什么指导吗?
弹簧配置:
<mvc:annotation-driven conversion-service="conversionService">
<mvc:argument-resolvers>
<bean class="com.my.SessionUserHandlerMethodArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.my.StringToDoubleConverter" />
</list>
</property>
</bean>
域实体字段注释:
import org.springframework.format.annotation.NumberFormat;
import org.springframework.format.annotation.NumberFormat.Style;
@Entity
@Table(name="form_data_wire_transfers")
@PrimaryKeyJoinColumn(name="form_id")
public class WireRequestForm extends RequestForm
private Double amount;
@Column(name="amount")
@NumberFormat(style=Style.CURRENCY)
public Double getAmount()
return amount;
public void setAmount(Double amount)
this.amount = amount;
控制器方法:
@RequestMapping(value="/forms/formId", method=RequestMethod.GET)
public String show(Model uiModel, @PathVariable("formId") Integer formId)
RequestForm form = formService.findOne(formId);
uiModel.addAttribute("form", form);
return "show/form";
查看:
<form:form modelAttribute="form" action="$saveFormUrl" method="POST">
<!-- AMOUNT -->
<div>
<form:label path="amount">Amount</form:label>
<form:input path="amount" />
</div>
</form:form>
我再次看到了价值,但它显示为 1111.0 与 $1,111.00。
【问题讨论】:
看看这个:***.com/questions/14089688/… 这应该可以在没有<spring:bind>
的情况下工作,对吧? <form:input>
不应该也负责绑定和格式化吗?
【参考方案1】:
ConversionServiceFactoryBean
不注册默认格式化程序。
你需要使用FormattingConversionServiceFactoryBean
如下操作
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.my.StringToDoubleConverter" />
</list>
</property>
</bean>
如果您只想使用 NumberFormatAnnotationFormatterFactory
进行数字格式化(处理 @NumberFormat
Annotation )并禁用其其他默认格式化程序,请执行以下操作
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="registerDefaultFormatters" value="false" />
<property name="formatters">
<set>
<bean class="org.springframework.format.number.NumberFormatAnnotationFormatterFactory" />
</set>
</property>
<property name="converters">
<list>
<bean class="com.my.StringToDoubleConverter" />
</list>
</property>
</bean>
来源:Spring Docs
【讨论】:
优秀。谢谢一百万!以上是关于Spring 3 @NumberFormat 不适用于表单:输入标签的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC @NumberFormat 带小数的百分比
带有 Swagger 的欧洲本地的 @NumberFormat 表单验证
Thymeleaf 3 URL 解析不适用于 Spring Boot 4 + Spring Security
事务不适用于 Spring 3.1 – H2 – junit 4 – hibernate 3.2