Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Date()自动更正我们在输入文本字段中键入的日期_Java_Date_Spring Mvc - Fatal编程技术网

Java Date()自动更正我们在输入文本字段中键入的日期

Java Date()自动更正我们在输入文本字段中键入的日期,java,date,spring-mvc,Java,Date,Spring Mvc,我有一个带输入文本字段的SpringMVC表单。我用java日期对象映射该字段。当我键入错误的日期时(例如,34/01/1985),在后端会自动更正日期,并将其作为03/02/1985(1985年2月3日)。我想停止此自动更正以在后端验证 伙计们,给我一个解决方案 更新: <form:input path="person.dateOfBirth" placeholder="DD/MM/YYYY"/> public class Person implements Cloneabl

我有一个带输入文本字段的SpringMVC表单。我用java日期对象映射该字段。当我键入错误的日期时(例如,34/01/1985),在后端会自动更正日期,并将其作为03/02/1985(1985年2月3日)。我想停止此自动更正以在后端验证

伙计们,给我一个解决方案

更新:

<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());

}

公共类Person实现了Cloneable{
@日期时间格式(pattern=“dd/MM/yyyy”)
私人出生日期;
公共日期getDateOfBirth(){
出生返回日期;
}
公共无效设置出生日期(出生日期){
this.dateOfBirth=出生日期;
}
}
公开职位(
PortletSession,
行动请求请求,
行动回应,
@ModelAttribute(“表单”)表单,
绑定结果错误,
ModelMap(mm)引发异常{
打印(form.getPerson().getDateOfBirth());
}
尝试
setLenient(false)

供参考:

[UPDATE;AJAX调用] 只需使用spring的
@DateTimeFormat
注释并指定您的
模式

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控制器
验证了您的表单:

@RequestMapping(value = "/path")
@ResponseBody
public final boolean validateFormOnSever(@Valid @ModelAttribute("yourForm") final Form form,
                 final BindingResult bindingResult, final Model model) {
   return bindingResult.hasErrors();
}

现在,当您收到false(或类似{field,hasError}的JSON对象)时,您将显示所需的消息。

在前端使用输入类型作为日期。HTML5有了这个功能,用户只能选择有效日期,这看起来很酷。只需应用并查看结果:)

这将很难。因为框架做了所有的映射。当自定义代码收到日期时,执行某些操作已经太晚了。请使用字符串而不是日期,然后自己解析它(禁用“lenient”)。java util date有什么解决方法吗?我们不能用java util Date来实现它吗?否。
java.util.Date
无法存储像“34/01/1985”这样的值。自1980年1月1日以来,它有一个内部变量-毫秒计数。:(Date()的所有db字段映射都已完成).好的,不管怎样,如果你找到了解决方法,请告诉我们。workaround很简单。对db和rest服务使用不同的类。我已经尝试了你在这里演示的相同方法。但它仍然可以自动更正我们错误键入的日期。要验证日期,我如何获得个人类型的实际值?你在控制器w中注释了你的表单吗使用@Valid annotation?事实上,我正在一个ajax调用中验证日期。在那里我得到了自动更正的值。是否有任何方法可以在不将模型属性注释为@Valid的情况下发现弹簧类型不匹配?@nasminspy,我已经更新了我的答案。好的,谢谢。我会尝试让您知道。