mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-15 04:15:50 +00:00
fixed issues in the Pet creation form
This commit is contained in:
parent
6eae69719f
commit
57c9043121
7 changed files with 58 additions and 87 deletions
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue