diff --git a/src/main/java/org/springframework/samples/petclinic/Pet.java b/src/main/java/org/springframework/samples/petclinic/Pet.java index 6235ba9899686887d7b6c2b19f48d7cc72537604..8974baeda9c9944c718d206571fe0a009ed6cc97 100644 --- a/src/main/java/org/springframework/samples/petclinic/Pet.java +++ b/src/main/java/org/springframework/samples/petclinic/Pet.java @@ -19,6 +19,7 @@ import org.hibernate.annotations.Type; import org.joda.time.DateTime; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; +import org.springframework.format.annotation.DateTimeFormat; /** * Simple JavaBean business object representing a pet. @@ -32,6 +33,7 @@ public class Pet extends NamedEntity { @Column(name="birth_date") @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") + @DateTimeFormat(pattern="yyyy/MM/dd") private DateTime birthDate; @ManyToOne diff --git a/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java b/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java deleted file mode 100644 index 0751d6c52a36461527280f0be2ca28b0d85de191..0000000000000000000000000000000000000000 --- a/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.springframework.samples.petclinic.web; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.propertyeditors.StringTrimmerEditor; -import org.springframework.samples.petclinic.PetType; -import org.springframework.samples.petclinic.service.ClinicService; -import org.springframework.web.bind.WebDataBinder; -import org.springframework.web.bind.support.WebBindingInitializer; -import org.springframework.web.context.request.WebRequest; - -/** - * Shared WebBindingInitializer for PetClinic's custom editors. - * - * <p>Alternatively, such init-binder code may be put into - * {@link org.springframework.web.bind.annotation.InitBinder} - * annotated methods on the controller classes themselves. - * - * @author Juergen Hoeller - */ -public class ClinicBindingInitializer implements WebBindingInitializer { - - @Autowired - private ClinicService clinicService; - - public void initBinder(WebDataBinder binder, WebRequest request) { - binder.registerCustomEditor(String.class, new StringTrimmerEditor(false)); - binder.registerCustomEditor(PetType.class, new PetTypeEditor(this.clinicService)); - } - -} diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetTypeEditor.java b/src/main/java/org/springframework/samples/petclinic/web/PetTypeEditor.java deleted file mode 100644 index 801442576ba5ebf7451cbcd22f5a05b7812acfe8..0000000000000000000000000000000000000000 --- a/src/main/java/org/springframework/samples/petclinic/web/PetTypeEditor.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.springframework.samples.petclinic.web; - -import java.beans.PropertyEditorSupport; - -import org.springframework.samples.petclinic.PetType; -import org.springframework.samples.petclinic.service.ClinicService; - -/** - * @author Mark Fisher - * @author Juergen Hoeller - */ -public class PetTypeEditor extends PropertyEditorSupport { - - private final ClinicService clinicService; - - - public PetTypeEditor(ClinicService clinicService) { - this.clinicService = clinicService; - } - - @Override - public void setAsText(String text) throws IllegalArgumentException { - for (PetType type : this.clinicService.findPetTypes()) { - if (type.getName().equals(text)) { - setValue(type); - } - } - } - -} diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetTypeFormatter.java b/src/main/java/org/springframework/samples/petclinic/web/PetTypeFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..aad2e9d01be05e09e7e6dd27e35567476866cf13 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/web/PetTypeFormatter.java @@ -0,0 +1,44 @@ +package org.springframework.samples.petclinic.web; + + +import java.text.ParseException; +import java.util.Collection; +import java.util.Locale; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.Formatter; +import org.springframework.samples.petclinic.PetType; +import org.springframework.samples.petclinic.service.ClinicService; + +/** + * @author Mark Fisher + * @author Juergen Hoeller + * @author Michael Isvy + */ +public class PetTypeFormatter implements Formatter<PetType> { + + private final ClinicService clinicService; + + + @Autowired + public PetTypeFormatter(ClinicService clinicService) { + this.clinicService = clinicService; + } + + @Override + public String print(PetType petType, Locale locale) { + return petType.getName(); + } + + @Override + public PetType parse(String text, Locale locale) throws ParseException { + Collection<PetType> findPetTypes = this.clinicService.findPetTypes(); + for (PetType type : findPetTypes) { + if (type.getName().equals(text)) { + return type; + } + } + throw new ParseException("type not found: "+text, 0); + } + +} diff --git a/src/main/resources/log4j.xml b/src/main/resources/log4j.xml index 40506650ead82bfd0e467bc713c62673e339f21e..c39d78d7427d81538f11d4d08f748c9bdbba1c4f 100755 --- a/src/main/resources/log4j.xml +++ b/src/main/resources/log4j.xml @@ -11,21 +11,6 @@ </layout> </appender> - <logger name="org.springframework.web"> - <level value="debug" /> - </logger> - - <logger name="org.springframework.jdbc"> - <level value="info" /> - </logger> - - <logger name="javax.validation"> - <level value="debug" /> - </logger> - - <logger name="org.hibernate.validator"> - <level value="debug" /> - </logger> <!-- Root Logger --> <root> diff --git a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp index b118a6fc37cdd2f56186d3382cecfa1ceeef5cb9..80042eec6efee6479703e8bbb89dada5f1fd4451 100644 --- a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp @@ -10,7 +10,7 @@ <script> $(function() { - $("#birthDate").datepicker(); + $("#birthDate").datepicker({ dateFormat: 'yy/mm/dd'}); }); </script> <div class="container"> @@ -44,7 +44,7 @@ </div> </div> <div class="control-group"> - <label class="control-label">Birth Date (yyyy-MM-dd)</label> + <label class="control-label">Birth Date</label> <div class="controls"> <form:input path="birthDate" /> <span class="help-inline"><form:errors path="birthDate" /></span> diff --git a/src/main/webapp/WEB-INF/petclinic-servlet.xml b/src/main/webapp/WEB-INF/petclinic-servlet.xml index dbb255a2a80f0d4e0498a2769ea978cb08f47eeb..485b73d7eecb846eb9006d1a8daf745099fa7b76 100644 --- a/src/main/webapp/WEB-INF/petclinic-servlet.xml +++ b/src/main/webapp/WEB-INF/petclinic-servlet.xml @@ -16,7 +16,7 @@ <context:component-scan base-package="org.springframework.samples.petclinic.web, org.springframework.samples.petclinic.service"/> - <mvc:annotation-driven /> + <mvc:annotation-driven conversion-service="conversionService"/> <!-- all resources inside folder src/main/webapp/resources are mapped so they can be refered to inside JSP files (see header.jsp for more details) --> @@ -28,6 +28,15 @@ <mvc:view-controller path="/" view-name="welcome"/> + <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> + <property name="formatters"> + <set> + <bean class="org.springframework.samples.petclinic.web.PetTypeFormatter" /> + </set> + </property> + </bean> + + <!-- - This view resolver delegates to the InternalResourceViewResolver and BeanNameViewResolver, - and uses the requested media type to pick a matching view. When the media type is 'text/html', @@ -76,15 +85,6 @@ --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages/messages"/> - - <!-- - Processes annotated handler methods, applying PetClinic-specific request parameter binding. - --> - <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> - <property name="webBindingInitializer"> - <bean class="org.springframework.samples.petclinic.web.ClinicBindingInitializer"/> - </property> - </bean> <!-- - This bean resolves specific types of exceptions to corresponding logical