Spring Custom Formatter无法正常工作

时间:2017-08-22 11:25:11

标签: java spring spring-mvc

我是Spring MVC的新手,我刚刚遇到了Spring Custom Formatters。所以我试图为java.util.Date创建一个自定义格式化程序。

MyDateFormatter.java

public class MyDateFormatter implements Formatter<Date>{

  private String pattern = "yyyyMMdd";


   @Override
    public String print(Date date, Locale locale) {
        if (date == null) {
            return "";
        }
        return getDateFormat(locale).format(date);
    }

   @Override
    public Date parse(String formatted, Locale locale) throws ParseException {
        if (formatted.length() == 0) {
            return null;
        }
        return getDateFormat(locale).parse(formatted);
    }

    protected DateFormat getDateFormat(Locale locale) {
        DateFormat dateFormat = new SimpleDateFormat(this.pattern, locale);
        dateFormat.setLenient(false);
        return dateFormat;
    }
}

TestFormatterController.java

@Controller
public class TestFormatterController {
    @RequestMapping(value="/testFormatter")
    public String getDate(ModelMap map){
        Date date = new Date();
        map.put("date", date);
        return "testFormatter";
    }
}

testFormatter.jsp

<h1>${date}<h1>

配置

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="mypackge.MyDateFormatter">
            </set>
        </property>
    </bean>

输出不是yyyyMMdd。你能告诉我我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

当我们直接打印像$ {date}这样的对象时,Spring不会调用格式化程序,我们必须使用<spring:eval>。我将JSP更改为以下内容,现在它按预期工作:

<%@ include file="/WEB-INF/jsp/common/taglibs.jsp"%>
<spring:eval expression="date" />

答案 1 :(得分:0)

试试这种方式

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" />