I'm used spring roo to create my project. In it I have created this form backing object
Here is my view....Code:package edu.unlv.cs.rebelhotel.form; @RooJavaBean @RooToString public class FormWorkEffortQuery { private String userId; private boolean userIdSelected; private String employerName; private boolean employerNameSelected; private String employerLocation; private boolean employerLocationSelected; @Enumerated private Validation validation; private boolean validationSelected; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "S-") private Date startDate; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "S-") private Date endDate; private boolean datesSelected; }
Code:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <div xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:jsptagdir:/WEB-INF/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <jsp:output omit-xml-declaration="yes"/> <form:create id="fc_edu_unlv_cs_rebelhotel_form_FormWorkEffort" modelAttribute="formworkeffortquery" path="/workeffortquery?query" render="${empty dependencies}" z="Uf7OgrlFmtWkcuJmcJOSqG30iWM="> <table> <tr> <td><field:input field="userId" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_NSHE" z=""/></td> <td><field:checkbox field="userIdSelected" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffortQuery_useUserId" /></td> </tr> <tr> <td><field:input field="employerName" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_employerName" z=""/></td> <td><field:checkbox field="employerNameSelected" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffortQuery_useEmployerName" /></td> </tr> <tr> <td><field:input field="employerLocation" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_employerLocation" z=""/></td> <td><field:checkbox field="employerLocationSelected" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffortQuery_useemployerLocation" /></td> </tr> <tr> <td> <field:select field="validation" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_validation" items="${validations}" path="validations" z=""/></td> <td><field:checkbox field="validationSelected" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffortQuery_useValidation" /></td> </tr> <tr> <td><field:datetime dateTimePattern="${formWorkEffort_startdate_date_format}" field="startDate" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_startDate" z=""/> <field:datetime dateTimePattern="${formWorkEffort_enddate_date_format}" field="endDate" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffort_endDate" z=""/></td> <td><field:checkbox field="datesSelected" id="c_edu_unlv_cs_rebelhotel_form_FormWorkEffortQuery_useDates" /></td> </tr> </table> </form:create> </div>
Everything works fine except that whenever i try to enter a date into the endDate and startDate binding fails as i get this error:
[Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endDate'.
I believed that spring mvc had default converters for dates.
I've been able to create a binder using propertyeditors for the date fields but that seems to take override the default type conversion for the other fields.
My question is how can i do the type conversion using the FormattingConversionServiceFatctorybean since I read that this is the direction that I should go.
I already tried to put a custom converter but it didn't seem to make a difference
Code:/** * A central place to register application Converters and Formatters. */ @RooConversionService public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean { Converter<String, java.util.Date> getStringConverter() { return new Converter<String, java.util.Date>() { public Date convert(String source) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = new java.util.Date(); try { date = sdf.parse(source); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO Auto-generated method stub return date; } }; } } @Override protected void installFormatters(FormatterRegistry registry) { super.installFormatters(registry); // Register application converters and formatters registry.addConverter(getStringConverter()); }


Reply With Quote