I have an problem in my Spring MVC.
@RequestMapping(value = "/novo", method = RequestMethod.GET)
public ModelAndView novoTimeSheet() {
return new ModelAndView("timesheetcrud/novo", "timesheet", new TimeSheet());
}
My TimeSheet
class has:
@NotNull(message = "timesheet.cadastro.horainicio.obrigatorio")
@Temporal(TemporalType.TIME)
@Column(name = "INICIO", nullable = false)
private Date horaInicio;
@NotNull(message = "timesheet.cadastro.horafim.obrigatorio")
@Temporal(TemporalType.TIME)
@Column(name = "FIM", nullable = false)
private Date horaFim;
My addTimeSheet
:
@RequestMapping(value = "/addtimesheet", method = RequestMethod.POST)
public String addTimeSheet(@ModelAttribute("timesheet")TimeSheet timeSheet,
ModelMap model) {
In browser when I put something not equal date, I have this error:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'timesheet' on field 'horaFim': rejected value [lala];
codes [typeMismatch.timesheet.horaFim,typeMismatch.horaFim,typeMismatch.java.util.Date,typeMismatch];
arguments [
org.springframework.context.support.DefaultMessageSourceResolvable: codes [timesheet.horaFim,horaFim];
arguments [];
default message [horaFim]
];
default message [
Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'horaFim';
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull @javax.persistence.Temporal @javax.persistence.Column java.util.Date for value 'lala';
nested exception is java.lang.IllegalArgumentException
]
Field error in object 'timesheet' on field 'horaInicio': rejected value [teste];
codes [typeMismatch.timesheet.horaInicio,typeMismatch.horaInicio,typeMismatch.java.util.Date,typeMismatch];
arguments [
org.springframework.context.support.DefaultMessageSourceResolvable: codes [timesheet.horaInicio,horaInicio];
arguments [];
default message [horaInicio]
];
default message [
Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'horaInicio';
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull @javax.persistence.Temporal @javax.persistence.Column java.util.Date for value 'teste';
nested exception is java.lang.IllegalArgumentException
]
How can I do it? Expect Date
but I put String
in the field, I'd like to validate before my controller.
you need to add some binding to your Controller, something like :
@InitBinder
protected void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
Try this:
@RequestMapping(value = "/addtimesheet", method = RequestMethod.POST)
public String addTimeSheet(@ModelAttribute("timesheet") TimeSheet timeSheet,
BindingResult bindingResult,
ModelMap model) {
if (bindingResult.hasErrors()) {
// validation error (binding error) handling code goes here.
}
}
Make sure bindingResult parameter is placed on the right after the timeSheet parameter.
http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.htm
Handler methods which are annotated with this annotation are allowed to
have very flexible signatures. They may have arguments of the following types,
in arbitrary order (except for validation results, which need to follow right
after the corresponding command object, if desired)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With