поэтому я работаю в проекте Spring MVC, где у меня есть этот класс с несколькими полями Date, и я создаю CRUD для него. Проблема в том, что я прочитал экземпляр класса из базы данных, а затем отправлю его в представление для редактирования, и хотя я не манипулирую ни одним из полей Date, только строки, когда я собираю объект, используя форму сообщения, Поля даты равны нулю, даже если они поступают из базы данных со значением, и я отправил их в представление с этим значением.Поля, начинающиеся с нуля, не обрабатываются вообще
Класс:
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, я получаю исключение из спящего режима рассказывал мне что я пытаюсь обновить до NULL столбец «DT_FECHACREACION», соответствующий полю класса «fechaCreac иона. В качестве временного исправления мне пришлось добавить метод POST к базе данных, чтобы сбросить «fechaCreacion» обратно на прежнее значение, которое я не хочу изменять, а затем обновлять объект с остальными захваченными значениями. Это работает, но уродливо и добавляет дополнительные и нежелательные накладные расходы. Моя база данных - Oracle 11g. Спасибо заранее!
PD: Очень новичок весенний разработчик, я нахожусь в моей стажировке и изо всех сил стараюсь заключить полный контракт, когда стажировка окончена: D, поэтому любая помощь будет высоко оценена.
Не помешает ли мне отображать эту дату в будущем виде? Кроме того, что я должен добавить к своему пом, чтобы использовать аннотацию? Кажется, я не могу найти банку в реке-реке. –
Здесь у вас есть вся эта информация https://github.com/FasterXML/jackson-annotations – jonhid