Spring 3 @NumberFormat不使用form:input Tag [英] Spring 3 @NumberFormat not working with form:input Tag
问题描述
我有一个使用< mvc:annotation-driven />
的Spring 3 MVC应用程序。无法将 java.lang.Double 属性显示为< form:input>
标记中的货币。金额显示正确,但未应用格式。任何指导?
I have a Spring 3 MVC app utilizing <mvc:annotation-driven />
. Having trouble getting a java.lang.Double property to display as currency in a <form:input>
tag. The amount shows correctly, but no formatting applied. Any guidance?
Spring配置:
<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 。
Again, I see the value, but it display like this 1111.0 versus $1,111.00.
推荐答案
ConversionServiceFactoryBean
没有注册默认格式化程序。
ConversionServiceFactoryBean
does not registers default formatters.
您需要使用 FormattingConversionServiceFactoryBean
如下所示
You need to use FormattingConversionServiceFactoryBean
So do as below
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.my.StringToDoubleConverter" />
</list>
</property>
</bean>
如果你只想使用 NumberFormatAnnotationFormatterFactory
执行数字格式化(处理 @NumberFormat
注释)并禁用其他默认格式化程序,然后执行以下操作
if you want to use only NumberFormatAnnotationFormatterFactory
which does the Number Formatting (processes @NumberFormat
Annotation ) and disable its other default formatters then do as below
<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>
来源:< a href =http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/validation.html#format-configuring-formatting-globaldatetimeformat =nofollow> Spring Docs
Source:Spring Docs
这篇关于Spring 3 @NumberFormat不使用form:input Tag的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!