在 Spring Web Flow 中格式化绑定日期字段
Posted
技术标签:
【中文标题】在 Spring Web Flow 中格式化绑定日期字段【英文标题】:Formatting bound date field in Spring Web Flow 【发布时间】:2013-03-25 22:21:55 【问题描述】:我在格式化 Spring Webflow 表单中绑定的 Date 字段的内容时遇到问题。事情的验证结束正在工作,并正确执行我的注释中指定的日期格式。但是无论我尝试什么,我都无法控制绑定日期字段(预先填充了当前日期)的初始显示格式。我正在使用 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 继续。过度输入(例如 13/01/2013)会导致验证失败并出现 ValueCoercionException,并且网页上的字段会重新填充“Thu Apr...”字符串。因此,至少验证似乎没问题。
我知道@DateTimeFormat 注释既可以用作打印机又可以用作解析器,但我就是无法让打印机方面的工作正常。
这是我的代码的相关位...
event_add.xml(网络流)
<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 模式中指定的格式显示吗?
干杯, 伊恩
【问题讨论】:
注意,这只发生在 Spring Webflow 视图中。在从常规 Spring MVC 控制器显示的视图中,一切正常。 【参考方案1】:您是否尝试过使用属性编辑器。 Spring 已经有一个可用于转换日期。
在您处理请求的@Controller
中,您将指示spring 将与特定格式相互转换:
@InitBinder
protected void initBinder(final WebDataBinder binder)
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd:MM:yyyy") , false));
【讨论】:
以上是关于在 Spring Web Flow 中格式化绑定日期字段的主要内容,如果未能解决你的问题,请参考以下文章
Spring Web Flow LockTimeoutException
spring,spring framework,spring mvc,spring web flow有啥区别和联系?
用Spring Web Flow和Terracotta搭建Web应用
spring web flow 2.0入门(转:http://luanxiyuan.iteye.com/blog/2282126)