Environment:
Spring 3.1.3.RELEASE
Spring webflow 2.3.0.RELEASE
I have posted this question recently on spring source forum. See: Spring webflow formatting issue
I followed the steps outlined in the reference documentation and the top answer in stackoverflow too:
Answer
I expect when my form submits and binding occurs, that a parse exception is thrown when entering in an invalid date value. But i do not see this happening.
Also if and when the exception is thrown, how do i handle it to display error message on the front end?
I wanted to start using type conversions in my application. I followed the steps below for configuring type conversion formatting for spring MVC and SWF.
I followed the steps and added into the servlet context
<!-- 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>
I created a new class to register my own formatter for use in both Spring MVC and in 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"));
}
}
Now when i deploy to the server, the context is initialised correctly and classpath scanning registers the bean.
In my form model that binds, i have annotated a date field with the new dateformat annotation.
@DateTimeFormat(pattern="dd/MM/yyyy")
private Date revisedTermExpiryDate = new Date();
UPDATE: I was debugging and as i have joda-time on my classpath i believe spring is registering joda DateTimeFormatter instead and the parsing is not failing.
If i remove the annotation actually it calls DateFormatter which throws parse exception as expected but the exception is swallowed in the framework.
My objective is to register the plain DateFormatter with a global default date, parse strictly (lenient=false) and handle any parse exceptions gracefully. This to me is a great feature to have rather than handling parsing dates in validator for every web flow.
Thanks, Shane.