格式化Spring Web Flow中的绑定日期字段

时间:2013-04-04 01:36:37

标签: java spring spring-mvc spring-webflow

我在弹簧webflow表单中格式化绑定日期字段的内容时遇到问题。事情的验证结束是正常的,并且正确地强制执行我的注释中指定的日期格式。但无论我尝试什么,我都无法控制绑定日期字段(预先填充当前日期)的初始显示格式。我正在使用Spring 3.1.2.RELEASE,Webflow 2.3.2.RELEASE和joda-time 2.2。

表单中的日期字段最初填充有例如“Thu Apr 04 02:01:06 BST 2013”​​,而我希望它包含“04:04:2013”​​。 (不要介意冒号的有趣格式 - 我只是避免使用常见的测试格式!)

如果我改写它,例如13:01:2013并提交,则绑定工作正常并且webflow继续。 Overtyping例如13/01/2013导致验证失败并返回ValueCoercionException,并且网页上的字段用“Thu Apr ...”字符串重新填充。因此,验证至少似乎没问题。

我知道@DateTimeFormat注释既可以作为打印机也可以作为解析器,但我无法让打印机方面的工作正常工作。

以下是我的代码的相关内容......

event_add.xml(webflow)

<var name="event" class="project.persistence.DTO.EventDTO"/>
...
<view-state id="event_enterdates" model="flowScope.event">
    <transition on="submit" to="saveEvent" />
</view-state>

EventDTO.java

public class EventDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer         id;
    private String          name;
    @DateTimeFormat(pattern="dd:MM:yyyy")
    private Date            eventDate;
    ...
}

event_enterdates.jsp

<sf:form method="POST" commandName="event">
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/>
...
<div class="grid_3 formitemname"><label for="event_date">Event date:</label></div>
<div class="grid_3">
<sf:input path="eventDate" maxlength="255" id="event_date" class="form9colinput"/>
...
</sf:form>

项目servlet.xml中

<mvc:annotation-driven />

<context:component-scan base-package="project"></context:component-scan>

<flow:flow-executor id="flowExecutor" flow-registry="flowRegistry" />

<flow:flow-registry id="flowRegistry" base-path="/WEB-INF/flows" flow-builder-services="flowBuilderServices">
    <flow:flow-location-pattern value="*.xml" />
</flow:flow-registry>

<flow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService" view-factory-creator="viewFactoryCreator" />

<bean id="viewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
    <property name="viewResolvers" ref="tilesViewResolver" />
</bean>

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="flowRegistry" ref="flowRegistry" />
</bean>

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor" />
</bean>

<bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService">
    <constructor-arg ref="applicationConversionService"/>
</bean>

<bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

任何人都知道如何让我的约束日期以@DateTimeFormat模式中指定的格式显示?

干杯, 伊恩

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用属性编辑器? Spring已有一个可用于转换日期。

在处理请求的@Controller中,您将指示spring将转换为特定格式:

@InitBinder
protected void initBinder(final WebDataBinder binder) { 
    binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd:MM:yyyy") , false));
}