2016-08-22 10 views
0

데이터베이스는 Oracle 11g2 Express입니다. jsp의 날짜가 nls_date_format spfile 값과 같지 않음

나는 DD/MM/RRRR에 NLS_DATE_FORMAT 변경 :
alter system set nls_date_format = "DD/MM/RRRR" scope = spfile; 

은 그 때 나는 데이터베이스를 다시 시작됩니다.

지금 내 스프링 MVC 프로젝트에서 나는 콩을 만든 : 여기

@Controller 

public class HomeController { 



    @Autowired 

    private UserDAO userDao; 


    @RequestMapping("/") 

    public ModelAndView handleRequest() throws Exception { // to list employees 

     List<User> listUsers = userDao.list(); 

     ModelAndView model = new ModelAndView("UserList"); 

     model.addObject("userList", listUsers); 

     return model; 

    } 



    @RequestMapping(value = "/new", method = RequestMethod.GET) 

    public ModelAndView newUser() { // to add a new employee 

     ModelAndView model = new ModelAndView("UserForm"); 

     model.addObject("user_details", new User()); 

     model.addObject("titre", "Ajout"); 

     return model;  

    } 



    @RequestMapping(value = "/edit", method = RequestMethod.GET) 

    public ModelAndView editUser(HttpServletRequest request) { // to edit an existing employee 

     int userId = Integer.parseInt(request.getParameter("id")); 

     User user = userDao.get(userId); 

     ModelAndView model = new ModelAndView("UserForm"); 

     model.addObject("user_details", user); 

     model.addObject("titre", "Modif"); 

     return model;  

    } 



    @RequestMapping(value = "/delete", method = RequestMethod.GET) 

    public ModelAndView deleteUser(HttpServletRequest request) { // to delete an existing employee 

     int userId = Integer.parseInt(request.getParameter("id")); 

     userDao.delete(userId); 

     return new ModelAndView("redirect:/");  

    } 



    @RequestMapping(value = "/save", method = RequestMethod.POST) 

    public ModelAndView saveUser(@ModelAttribute User user) { // to execute the dml of insert of update about an employee's data 

     userDao.saveOrUpdate(user); 

     return new ModelAndView("redirect:/"); 

    } 



} 

가 있습니다 : 여기

public class UserDAOImpl implements UserDAO { 



    @Autowired 

    private SessionFactory sessionFactory; 



    public UserDAOImpl() { 



    } 



    public UserDAOImpl(SessionFactory sessionFactory) { 

     this.sessionFactory = sessionFactory; 

    } 


    @Override 

    @Transactional 

    public List<User> list() {   

     @SuppressWarnings("unchecked") 

     List<User> listUser = (List<User>) sessionFactory.getCurrentSession() 

     .createCriteria(User.class) 

     .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); 

     return listUser; 

    } 


    @Override 

    @Transactional 

    public User get(int id) { 



     String hql = "from User where id=" + id; 

     Query query = sessionFactory.getCurrentSession().createQuery(hql); 



     @SuppressWarnings("unchecked") 

     List<User> listUser = (List<User>) query.list(); 



     if (listUser != null && !listUser.isEmpty()) { 

      return listUser.get(0); 

     } 



     return null; 



    } 


    @Override 

    @Transactional 

    public void saveOrUpdate(User user) { 

     sessionFactory.getCurrentSession().saveOrUpdate(user); 

    } 


    @Override 

    @Transactional 

    public void delete(int id) { 

     User userToDelete = new User(); 

     userToDelete.setId(id); 

     sessionFactory.getCurrentSession().delete(userToDelete); 

    } 


} 

는 컨트롤러 : 여기
@Entity 

@Table(name = "HR.EMPLOYEES") 

public class User { 


    @Id 

    @SequenceGenerator(name="EMPLOYEES_SEQ", sequenceName="EMPLOYEES_SEQ", allocationSize=1) 

    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMPLOYEES_SEQ") 

    @Column(name = "EMPLOYEE_ID") 

    private int id; 



    @Formula(value="FIRST_NAME || ' ' || LAST_NAME") 

    private String username; 



    @Column(name = "FIRST_NAME") 

    private String firstname; 



    @Column(name = "LAST_NAME") 

    private String lastname; 



    private String email; 



    @Column(name="HIRE_DATE") 

    @Temporal(TemporalType.DATE) 

    private Date hireDate; // java.util.Date 



    private String job_id; 



    @Column(name = "SALARY") 

    private double salary; 



    public int getId() { 

     return id; 

    } 

    public void setId(int id) { 

     this.id = id; 

    } 

    public String getUsername() { 

     return username; 

    } 

    public void setUsername(String username) { 

     this.username = username; 

    } 

    public String getFirstname() { 

     return firstname; 

    } 

    public void setFirstname(String firstname) { 

     this.firstname = firstname; 

    } 

    public String getLastname() { 

     return lastname; 

    } 

    public void setLastname(String lastname) { 

     this.lastname = lastname; 

    } 

    public String getEmail() { 

     return email; 

    } 

    public void setEmail(String email) { 

     this.email = email; 

    } 

    public Date getHireDate() { 

     return hireDate; 

    } 

    public void setHireDate(Date hireDate) { 

     this.hireDate = hireDate; 

    } 

    public String getJob_id() { 

     return job_id; 

    } 

    public void setJob_id(String job_id) { 

     this.job_id = job_id; 

    } 

    public double getSalary() { 

     return salary; 

    } 

    public void setSalary(double salary) { 

     this.salary = salary; 

    } 



} 

는 DAO 구현입니다 직원 편집을위한 JSP :

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<title>${titre}</title> 

<style type="text/css"> 

    a { 

     text-decoration: none; 

    } 

</style> 

</head> 

<body> 

    <div align="center"> 

     <h1>${titre}</h1> 

     <table> 

      <form:form action="save" method="post" modelAttribute="user_details"> 



       <form:hidden path="id"/> 



       <tr> 

        <td>Firstname:</td> 

        <td><form:input path="firstname"/></td> 

       </tr> 

       <tr> 

        <td>Lastname:</td> 

        <td><form:input path="lastname"/></td> 

       </tr> 

       <tr> 

        <td>Email:</td> 

        <td><form:input path="email"/></td> 

       </tr> 

       <tr> 

        <td>Hiredate:</td> 

        <td><form:input path="hireDate"/></td> <%-- this is the date field --%> 

       </tr> 

       <tr> 

        <td>Job_id:</td> 

        <td><form:input path="job_id"/></td> 

       </tr> 

       <tr> 

        <td>Salary:</td> 

        <td><form:input path="salary"/></td> 

       </tr> 

       <tr> 

        <td> 

         <input type="submit" value="Save"> 

        </td> 

        <td><a href="<c:url value='/' />"><input type="button" value="Annuler" /></a></td> 

       </tr> 

      </form:form> 

     </table> 

    </div> 



</body> 

</html> 

hire_date의 텍스트 필드에 표시된 값은 RRRR-MM-DD 형식이며, 데이터베이스에 삽입/업데이트 할 수있는 유일한 형식은 MM/DD/RRRR입니다! spfile nls_date_format이 이미 DD/MM/RRRR으로 설정되어 있고 데이터베이스가 이미 다시 시작되었지만! 그렇다면 왜 spfile 매개 변수가 효과가 없습니다!

답변

0

이것은 데이터베이스 구성 문제가 아니라 스프링 문제라고 생각합니다. Spring은 JSON을 직렬화하기 위해 Jackson을 사용하고 Jackson은 달리 구성되지 않는 한 기본적으로 GMT 타임 스탬프 형식을 사용하도록 날짜의 직렬화 및 비 직렬화를 처리합니다.

날짜 필드에 @Temporal으로 주석을 추가하면 봄에 YYYY-MM-DD 형식의 날짜가 표시됩니다. 문제를 해결하고 날짜 필드의 get 메소드에 @JsonSerialize(using=JsonDateSerializer.class) 주석을 사용하여 주석을 달려면 날짜 필드 용 사용자 정의 serializer를 만들어야합니다.

JsonDateSerializer은 사용자 지정 serializer 클래스입니다.

모든 절차는이 질문에 내 대답을 참조하십시오 :

https://stackoverflow.com/a/38186623/6503002

0

가 나는 그것이 @DateTimeFormat를 사용하여 작동 귀하의 경우 간단한 해결책 here

+0

발견? 내 경우에는 그렇지 않았다. – amicoderozer

+0

예 @DateTimeFormat과 함께 작동합니다. – pheromix