2017-01-23 2 views
0

그래서 몇 개의 Date 필드가있는이 클래스가있는 Spring MVC 프로젝트에서 작업 중이며이를위한 CRUD를 작성 중입니다. 문제는, 데이터베이스에서 클래스의 인스턴스를 읽고 편집을 위해 뷰로 보냅니다. 그리고 포스트 필드를 사용하여 객체를 수집 할 때 날짜 필드 나 문자열 만 조작하지는 않지만 날짜 필드는 값이있는 데이터베이스에서 왔지만 값을 가진보기로 보낸 경우에도 null로 나타납니다.Date 필드는 null이 아니며보기에서 모두 null로 처리됩니다.

클래스 :

package com.sophos.mat.beans; 

import java.io.Serializable; 
import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 

import org.hibernate.validator.constraints.Length; 

@Entity 
@Table(name="T_PROYECTOS") 
public class Proyecto implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    @Id 
    @Column(name="IN_PROYECTO") 
    @GeneratedValue(strategy=GenerationType.AUTO, generator="SECUENCIA_IN_PROYECTO") 
    @SequenceGenerator(name="SECUENCIA_IN_PROYECTO", sequenceName="SECUENCIA_IN_PROYECTO", allocationSize=1, initialValue= 1) 
    private long id; 

    @Column(name="VC_NOMBRE") 
    @Length(max = 50, message = "El campo no puede exceder los 50 caracteres") 
    private String nombre; 

    @Column(name="VC_DESCRIPCION") 
    @Length(max = 200, message = "El campo no puede exceder los 200 caracteres") 
    private String descripcion; 

    @Column(name="VC_CODIGO_SOPHOS") 
    @Length(max = 20, message = "El campo no puede exceder los 20 caracteres") 
    private String codigoSophos; 

    @Column(name="DT_FECHACREACION") 
    private Date fechaCreacion; 

    @Column(name="VC_USUARIOACTUALIZACION") 
    private String usuarioActualizacion; 

    @Column(name="DT_FECHAACTUALIZACION") 
    private Date fechaActualizacion; 

    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
    public String getNombre() { 
     return nombre; 
    } 
    public void setNombre(String nombre) { 
     this.nombre = nombre; 
    } 
    public String getDescripcion() { 
     return descripcion; 
    } 
    public void setDescripcion(String descripcion) { 
     this.descripcion = descripcion; 
    } 
    public String getCodigoSophos() { 
     return codigoSophos; 
    } 
    public void setCodigoSophos(String codigoSophos) { 
     this.codigoSophos = codigoSophos; 
    } 
    public Date getFechaCreacion() { 
     return fechaCreacion; 
    } 
    public void setFechaCreacion(Date fechaCreacion) { 
     this.fechaCreacion = fechaCreacion; 
    } 
    public String getUsuarioActualizacion() { 
     return usuarioActualizacion; 
    } 
    public void setUsuarioActualizacion(String usuarioActualizacion) { 
     this.usuarioActualizacion = usuarioActualizacion; 
    } 
    public Date getFechaActualizacion() { 
     return fechaActualizacion; 
    } 
    public void setFechaActualizacion(Date fechaActualizacion) { 
     this.fechaActualizacion = fechaActualizacion; 
    } 
} 

컨트롤러 :

package com.sophos.mat.controller; 

import java.util.Date; 
import javax.validation.Valid; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 
import com.sophos.mat.beans.Proyecto; 
import com.sophos.mat.services.IProyectoService; 

@Controller 
public class ProyectoController { 


    @Autowired 
    private IProyectoService proyectoService; 

    @RequestMapping(value = "/editarproyecto/{id}", method = RequestMethod.GET) 
    public String editarProyectoGet(ModelMap model, @PathVariable long id){ 
     try { 
      Proyecto proyectoData = proyectoService.buscarProyectoPorId(id); 
      model.put("proyectoData", proyectoData); 
      return "editarproyecto"; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return "redirect:/proyectos"; 
     } 
    } 

    @RequestMapping(value="/editarproyecto/{id}", method = RequestMethod.POST) 
    public String editarProyectoPost(ModelMap model, @PathVariable long id, @ModelAttribute("proyectoData")@Valid Proyecto proyectoData, BindingResult result){ 
     if(result.hasErrors()){ 
      return "editarproyecto"; 
     } 
     try{ 

      proyectoData.setFechaActualizacion(new Date()); 
      proyectoService.actualizarProyecto(proyectoData); 
      return "redirect:/proyectos"; 

     }catch(Exception e){ 
      e.printStackTrace(); 
      return "redirect:/proyectos"; 
     } 
    } 

    public IProyectoService getProyectoService() { 
     return proyectoService; 
    } 

    public void setProyectoService(IProyectoService proyectoService) { 
     this.proyectoService = proyectoService; 
    } 
} 

그리고보기 : editarproyecto.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib uri= "http://www.springframework.org/tags/form" prefix="form" %> 

<html> 
    <head> 
     <title>>Nuevo Proyecto</title> 
     <style> 
      .error { color: red; } 
     </style> 
    </head> 
    <body> 
     <h1>Nuevo Proyecto</h1> 
     <form:form method="post" modelAttribute="proyectoData"> 
      <table > 
       <tr> 
        <td align="right"> 
         Nombre proyecto: 
        </td> 
        <td> 
         <form:input path="nombre"/> 
        </td> 
        <td> 
         <form:errors path="nombre" cssClass="error"/> 
        </td> 
       </tr> 
       <tr> 
        <td align="right"> 
         Descripción 
        </td> 
        <td> 
         <form:input path="descripcion"/> 
        </td> 
        <td> 
         <form:errors path="descripcion" cssClass="error"/> 
        </td> 
       </tr> 
       <tr> 
        <td align="right"> 
         Cód. Sophos 
        </td> 
        <td> 
         <form:input path="codigoSophos"/> 
        </td> 
        <td> 
         <form:errors path="codigoSophos" cssClass="error"/> 
        </td> 
       </tr> 
       <tr> 
        <td align="right"> 
         Usuario que actualiza 
        </td> 
        <td> 
         <form:input path="usuarioActualizacion"/> 
        </td> 
        <td> 
         <form:errors path="usuarioActualizacion" cssClass="error"/> 
        </td> 
       </tr> 
      </table> 
      <br> 

      <input type="submit" value="Guardar"> 
     </form:form> 
     <a href="<c:url value="proyectos"/>">Proyectos</a> 
    </body> 
</html> 

POST를 처리 할 때, 나는 최대 절전 모드에서 예외가 말해 얻을 그 클래스 필드 'fechaCreac에 해당하는'DT_FECHACREACION '열을 NULL로 업데이트하려고합니다. 이온'. 임시 수정으로 POST 메서드에서 'fechaCreacion'을 다시 이전 값으로 재설정하고 나머지 캡처 된 값으로 엔티티를 업데이트하려는 쿼리를 데이터베이스에 추가해야했습니다. 그건 작동하지만 못생긴이며 추가 및 원치 않는 오버 헤드를 추가합니다. 내 데이터베이스는 Oracle 11g입니다. 사전에 감사드립니다 여러분!

PD : 초보 봄용 개발자로서 인턴쉽이 끝나면 인턴쉽이 끝나면 모든 계약을 맺기 위해 최선을 다합니다. D : 어떤 도움을 주시면 감사하겠습니다.

답변

0

서비스를 호출하면보기로 돌아 오는 필드를 제어해야합니다.

Proyecto proyectoData = proyectoService.buscarProyectoPorId(id); 

@JsonIgnore 주석으로 DAO가 반환하는 필드는 생략 할 수 있습니다.

.... 
import com.fasterxml.jackson.annotation.JsonIgnore; 


@Entity 
@Table(name="T_PROYECTOS") 
public class Proyecto implements Serializable{ 
    ... 

    @JsonIgnore 
    public Date getFechaCreacion() { 
     return fechaCreacion; 
    } 

    .... 
} 
+0

향후보기에서 해당 날짜를 표시 할 수 없습니까? 또한 주석을 사용하려면 내 PC에 무엇을 추가해야합니까? 내가 동성애자 레포에서 항아리를 찾지 못하는 것 같아. –

+0

여기에이 모든 정보가 있습니다. https://github.com/FasterXML/jackson-annotations – jonhid

관련 문제