그래서 몇 개의 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 : 어떤 도움을 주시면 감사하겠습니다.
향후보기에서 해당 날짜를 표시 할 수 없습니까? 또한 주석을 사용하려면 내 PC에 무엇을 추가해야합니까? 내가 동성애자 레포에서 항아리를 찾지 못하는 것 같아. –
여기에이 모든 정보가 있습니다. https://github.com/FasterXML/jackson-annotations – jonhid