Spring 3 @NumberFormat不使用form:input Tag [英] Spring 3 @NumberFormat not working with form:input Tag

查看:733
本文介绍了Spring 3 @NumberFormat不使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆