java - Spring 3 @NumberFormat 不适用于表单 :input Tag

标签 java spring spring-mvc jsp-tags

我有一个使用 <mvc:annotation-driven /> 的 Spring 3 MVC 应用程序.无法让 java.lang.Double 属性在 <form:input> 中显示为货币标签。金额显示正确,但未应用任何格式。有什么指导吗?

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;
        }

    }

Controller 方法:

@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

最佳答案

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

关于java - Spring 3 @NumberFormat 不适用于表单 :input Tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515027/

相关文章:

java - 如何在没有 HSSFWorkbook 实例的情况下设置单元格样式?

spring - 在 Impala 和 OSGi 之间进行选择

java - 使用 Ajax 将 @RequestBody 中的多个变量传递给 Spring MVC Controller

java - Spring REST Hibernate 应用设计

java - 如果我在两个子类中以不同方式覆盖 compareTo() 会发生什么

java - 使用 ArrayList 和 CompareTo 对文件的结果进行排序

spring - Spring MultipartFile导致表单验证未映射

java - Spring MVC 是编写网页应用程序的良好解决方案吗?

java - 如何在 TestNG Listener 方法中传递参数 - Selenium Java

java.lang.ClassNotFoundException : org. apache.commons.dbcp2.datasources