2017-03-06 37 views
-2

我想将日期插入到数据库中,而我正在使用java.sql.Date,但是当用户提交表单时出现问题我得到空值。根据一些限制,我只允许使用java.sql.Date而不是util.Date。使用java.sql.Date时获取日期为空

实体

import java.sql.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.validation.constraints.NotNull; 

import org.hibernate.validator.constraints.NotEmpty; 
import org.springframework.format.annotation.DateTimeFormat; 

@Entity 
@Table(name="Users") 
public class Users { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="User_ID") 
    private int ID; 

    @Column(name="User_first_name") 
    @NotEmpty(message="Field cannot be left blank") 
    private String First_Name; 

    @Column(name="user_last_name") 
    private String Last_Name; 

    @Column(name="user_contact") 
    private int Contact; 

    @Column(name="user_email") 
    private String Email; 

    @Column(name="user_date_birth") 
    @DateTimeFormat(pattern="dd/MM/yyyy") 
    private Date DateOfBirth; 

    @Column(name="user_joining_date") 
    private Date DateOfJoining; 

    @Column(name="user_salary") 
    @NotNull 
    private int Salary; 

    public int getID() { 
     return ID; 
    } 

    public void setID(int iD) { 
     ID = iD; 
    } 

    public String getFirst_Name() { 
     return First_Name; 
    } 

    public void setFirst_Name(String first_Name) { 
     First_Name = first_Name; 
    } 

    public String getLast_Name() { 
     return Last_Name; 
    } 

    public void setLast_Name(String last_Name) { 
     Last_Name = last_Name; 
    } 

    public int getContact() { 
     return Contact; 
    } 

    public void setContact(int contact) { 
     Contact = contact; 
    } 

    public String getEmail() { 
     return Email; 
    } 

    public void setEmail(String email) { 
     Email = email; 
    } 

    public Date getDateOfBirth() { 
     return DateOfBirth; 
    } 

    public void setDateOfBirth(Date dateOfBirth) { 
     DateOfBirth = dateOfBirth; 
    } 

    public Date getDateOfJoining() { 
     return DateOfJoining; 
    } 

    public void setDateOfJoining(Date dateOfJoining) { 
     DateOfJoining = dateOfJoining; 
    } 

    public int getSalary() { 
     return Salary; 
    } 

    public void setSalary(int salary) { 
     Salary = salary; 
    } 

} 

控制器

package com.example.crud; 

import java.text.SimpleDateFormat; 
import java.util.Map; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.propertyeditors.CustomDateEditor; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.WebDataBinder; 
import org.springframework.web.bind.annotation.InitBinder; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import com.example.crud.entities.Users; 
import com.example.crud.service.TaskService; 

@Controller 
public class HomeController { 

    @Autowired 
    private TaskService service; 
    private Logger logger = LoggerFactory.getLogger(HomeController.class); 

    @InitBinder 
    public void initBinder(WebDataBinder binder){ 
     System.out.println("exe"); 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
     sdf.setLenient(true); 
     binder.registerCustomEditor(java.sql.Date.class,"DateOfBirth", new CustomDateEditor(sdf, true)); 
    } 
    @RequestMapping(value="/Add", method=RequestMethod.GET) 
    public String index(Map<String, Object> model){ 
     Users users = new Users(); 
     model.put("users", users); 
     logger.debug("users"); 
     return "home"; 
    } 

    @RequestMapping(value="/Register", method=RequestMethod.POST) 
    public String Register(@ModelAttribute("users") Users users, BindingResult result, Model model){ 
     System.out.println(users.getFirst_Name()); 
     System.out.println(users.getDateOfBirth()); 
//  service.Register(users); 
     return "home"; 
    } 

} 
+0

当您使用Date.class,应指定完全合格的名称,e.g java.sql.Date –

+0

我指定的软件包名称开头。这真的很重要吗? –

+0

值得一试,除了日期格式或字段名称之外,我无法真正看到其他任何可能错误的内容。 –

回答

0

注册自己的自定义编辑器。

public class SqlDateEditor extends PropertyEditorSupport { 
    private DateFormat dateFormat; 

    public SqlDateEditor (final DateFormat dateFormat) 
    { 
     this.dateFormat = dateFormat; 
    } 

    @Override 
    public void setAsText(String text) { 
     try { 
      setValue(new java.sql.Date(this.dateformat.parse(text).getTime()) 
     } catch (ParseException e) { 
      throw new IllegalArgumentException("Could not parse date: " + e.getMessage()); 
     } 
    } 

    @Override 
    public String getAsText() { 
     java.sql.Date value = (java.sql.Date) getValue(); 
     return (value != null ? this.dateFormat.format(value) : ""); 
    } 
} 

在你的控制器:

@InitBinder 
public void initBinder(final WebDataBinder binder) { 
    binder.registerCustomEditor(java.sql.Date.class, new SqlDateEditor(new SimpleDateFormat("dd/MM/yyyy"))); 
}