我有一个带有输入文本字段的Spring mvc表单。我用java Date对象映射该字段。当我输入错误的日期时(例如 34/01/1985 ),在后端会自动更正日期并将其设为 03/02/1985 (03 1985年2月)。我想停止此自动更正以验证后端。
伙计们,给我一个解决方案?
更新:
<form:input path="person.dateOfBirth" placeholder="DD/MM/YYYY"/>
public class Person implements Cloneable{
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
public void post(
PortletSession session,
ActionRequest request,
ActionResponse response,
@ModelAttribute("form") Form form,
BindingResult errors,
ModelMap mm) throws Exception {
print(form.getPerson().getDateOfBirth());
}
答案 0 :(得分:1)
[UPDATE; AJAX CALL]
只需使用spring @DateTimeFormat
注释并指定pattern
。
import org.springframework.format.annotation.DateTimeFormat;
class Form {
...
private static final String DATE_PATTERN = "dd/MM/yyyy";
@DateTimeFormat(pattern = DATE_PATTERN)
private Date yourDate;
...
}
确保您的Spring MVC Controller
确认您的表单:
@RequestMapping(value = "/path")
@ResponseBody
public final boolean validateFormOnSever(@Valid @ModelAttribute("yourForm") final Form form,
final BindingResult bindingResult, final Model model) {
return bindingResult.hasErrors();
}
现在,当您收到false(或类似JSON对象{filed,hasError})时,您会显示所需的消息。
答案 1 :(得分:1)
在前端使用输入类型作为日期。 HTML5五个这个功能,用户只能选择有效的日期,看起来很酷。只需申请并查看结果:)
答案 2 :(得分:0)
尝试setLenient(false)
。
供参考:http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html#setLenient%28boolean%29