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/… 这应该可以在没有&lt;spring:bind&gt; 的情况下工作,对吧? &lt;form:input&gt; 不应该也负责绑定和格式化吗? 【参考方案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

Thymeleaf 安全不适用于 Spring Boot 1.3.5

Spring Security 3 日志记录不适用于 Eclipse 中的 GAE