环境:
Spring 3.1.3.RELEASE
Spring webflow 2.3.0.RELEASE
我最近在 spring 源论坛上发布了这个问题。请参阅: Spring webflow 格式化问题
我也遵循了参考文档中概述的步骤以及 stackoverflow 中的最佳答案:
我希望当我的表单提交并发生绑定时,在输入无效日期值时会引发解析异常。但我没有看到这种情况发生。
此外,如果以及当抛出异常时,我如何处理它以在前端显示错误消息?
我想开始在我的应用程序中使用类型转换。我按照以下步骤为 spring MVC 和 SWF 配置类型转换格式。
我按照这些步骤添加到 servlet 上下文中
<!-- Enables controllers mapped with @RequestMapping annotations, formatting annotations @NumberFormat
@DateTimeFormat, and JSR 303 style validation -->
<mvc:annotation-driven conversion-service="applicationConversionService1" />
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService" view-factory-creator="mvcViewFactoryCreator" development="true"/>
<bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService">
<constructor-arg ref="applicationConversionService1"/>
</bean>
我创建了一个新类来注册我自己的格式化程序,以便在 Spring MVC 和 Spring Web Flow 中使用。
@Component(value = "applicationConversionService1")
public class ApplicationConversionServiceFactoryBean extends
FormattingConversionServiceFactoryBean {
@Override
protected void installFormatters(FormatterRegistry registry) {
// Register the default date formatter provided by Spring
registry.addFormatter(new DateFormatter("dd/MM/yyyy"));
}
}
现在,当我部署到服务器时,上下文已正确初始化,并且类路径扫描会注册 bean。
在绑定的表单模型中,我使用新的 dateformat 注释对日期字段进行了注释。
@DateTimeFormat(pattern="dd/MM/yyyy")
private Date revisedTermExpiryDate = new Date();
更新:我正在调试,因为我的类路径上有 joda-time,我相信 spring 正在注册 joda DateTimeFormatter 并且解析没有失败。
如果我删除注释实际上它会调用 DateFormatter ,它会按预期抛出解析异常,但异常会被框架吞没。
我的目标是使用全局默认日期注册普通的 DateFormatter,严格解析(lenient=false)并优雅地处理任何解析异常。对我来说,这是一个很棒的功能,而不是在验证器中为每个 Web 流处理解析日期。
谢谢,谢恩。