java - 将列表项从 html 表保存到 Mysql
问题描述
我正在尝试从 mysql 中的 html 表中保存项目列表,但它给了我一个错误:无法将“java.lang.String”类型的值转换为所需的“java.lang.Long[]”类型;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“{ID}”。
我的代码是:
实体类是
package com.gadpo.cga.app.models.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.springframework.format.annotation.DateTimeFormat;
@Entity
@Table(name = "paquetes")
public class Paquete implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
private String detalle;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
@NotNull
@Column(name="fecha")
private Date fecha;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="paquete_id")
private List<Actividad> actividades;
@NotNull
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="paquete_id")
private List<ItemPaquete> items;
//@OneToMany(mappedBy = "paquete", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
//private List<Usuario> usuarios;
public List<ItemPaquete> getItems() {
return items;
}
public void setItems(List<ItemPaquete> items) {
this.items = items;
}
@ManyToOne(fetch = FetchType.LAZY)
private Usuario usuario;
@ManyToOne(fetch = FetchType.LAZY)
private Planificacion planificacion;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDetalle() {
return detalle;
}
public void setDetalle(String detalle) {
this.detalle = detalle;
}
public List<Actividad> getActividades() {
return actividades;
}
public void setActividades(List<Actividad> actividades) {
this.actividades = actividades;
}
public Planificacion getPlanificacion() {
return planificacion;
}
public void setPlanificacion(Planificacion planificacion) {
this.planificacion = planificacion;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Date getFecha() {
return fecha;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
public void addItemPaquete(ItemPaquete item) {
items.add(item);
}
/**
*
*/
private static final long serialVersionUID = 1L;
}
控制器是:
package com.gadpo.cga.app.controller;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.gadpo.cga.app.models.entity.ItemPaquete;
import com.gadpo.cga.app.models.entity.Paquete;
import com.gadpo.cga.app.models.entity.Planificacion;
import com.gadpo.cga.app.models.entity.Usuario;
import com.gadpo.cga.app.models.service.IUsuarioService;
@Controller
@RequestMapping("/paquete")
@SessionAttributes("paquete")
public class PaqueteController {
@Autowired
private IUsuarioService usuarioService;
private final Logger log = LoggerFactory.getLogger(getClass());
@GetMapping("/form/{planificacionId}")
public String crear(@PathVariable(value="planificacionId") Long planificacionId, Map<String, Object> model, RedirectAttributes flash) {
Planificacion planificacion=usuarioService.findPlanificacionById(planificacionId);
if(planificacion==null) {
flash.addFlashAttribute("error","La planificación no existe en la bd");
return "redirect:/listar";
}
Paquete paquete = new Paquete();
paquete.setPlanificacion(planificacion);
model.put("paquete", paquete);
model.put("titulo", "Registro de paquete");
return "paquete/form";
}
@GetMapping(value="/cargar-usuarios/{term}", produces= {"application/json"})
public @ResponseBody List<Usuario>cargarUsuarios(@PathVariable String term){
return usuarioService.findByApellido(term);
}
@PostMapping("/form")
public String guardar(@Valid Paquete paquete,BindingResult result,Model model,
@RequestParam(name="item_id[]",required = false) Long [] itemId,RedirectAttributes flash, SessionStatus status) {
if (result.hasErrors()) {
model.addAttribute("titulo", "Registrar nuevo paquete");
return "paquete/form";
}
for(int i=0; i<itemId.length;i++) {
//System.out.println("ID del usuario: "+itemId[i]);
Usuario usuario = usuarioService.findUsuarioById(itemId[i]);
ItemPaquete linea = new ItemPaquete();
linea.setUsuario(usuario);
paquete.addItemPaquete(linea);
log.info("ID: "+itemId[i].toString());
}
/* if (result.hasErrors()) {
model.addAttribute("titulo", "Formulario de paquete");
return "paquete/form";
}*/
usuarioService.savePaquete(paquete);
status.setComplete();
flash.addFlashAttribute("success","Paquete creado con éxito!");
return "redirect:listar";
}
}
我的表格是
解决方案
在browser中检查请求时,第一个元素是字符串“{ID}”,不明白
推荐阅读
- linux - 在 bash 脚本中执行 `sh -c`
- php - 自定义端点返回空数组
- python - 大 O 复杂性 - 最大范围从第一个循环开始的双循环
- mysql - 将数据库模型从 MySQLWorkbench 导出到 MariaDB PhpMyAdmin
- python - 如何退出这个while循环
- javascript - 使用 async/await 和 Promise 处理错误,n² 种方式让自己在脚下开枪反应原生错误
- sql - 如何从一个脚本调用另一个脚本
- java - 是否可以使用 Java 将打印机添加到 Samba 打印服务器?
- javascript - 如何使事件适用于禁用的字段集中的列表
- tcp - 在 Tcl 中解码二进制数据