Boa tarde,
Estou com um problema na hora de realizar a alteração de um objeto.
Na minha página está tudo OK, todos os dados da alteração estão sendo preenchidos.
Porém ao dar submit na página, o método que faz a alteração, fica com o ID do objeto null
Segue código do meu controller:
// Cadastro de CD - SALVAR
@RequestMapping(value = "/alterarCd", method = RequestMethod.POST)
public ModelAndView alterarCd(Cd cd, BindingResult result,
Map<String, Object> model) {
ModelAndView mv = new ModelAndView("/manterCd/atualiza");
if (result.hasErrors()) {
model.put("errors", result.getAllErrors());
ModelAndView mvret = new ModelAndView("/manterCd/atualiza", model);
mvret.addObject("generos", servico.findAllGeneroMusical());
mvret.addObject("anos", getAnos());
return mvret;
} else {
System.out
.println(cd.getId_cd()
+ " ---------- ID HORA QUE ESTÁ SALVANDO---------------------------------");
servico.add(cd);
mv.addObject("generos", servico.findAllGeneroMusical());
mv.addObject("anos", getAnos());
return mv;
}
}
A minha página está assim:
<html>
<head>
#parse("cabecalho.vm")
<title>ALTERAÇÃO DE CDS</title>
<body>
#set($cd = $cds)
<form id="form" name="cd" action="/VirtualStore/alterarCd.html" method="POST">
<input type="hidden" name="id" id="id" value="$cd.id_cd">
<label for="genero">
Genero
</label>
<select name="genero" id="genero">
#if($generos != "")
#foreach($genero in $generos) <option value="$genero.descricao">$genero.descricao</option>
#end
#else<option value="$cd.genero">$cd.genero</option>
#end
</select>
<br>
<label for="cantor">Cantor</label>
<input type="text" name="cantor" id="cantor" value="$cd.cantor"> <br>
<label for="titulo">Titulo</label>
<input type="text" name="titulo" id="titulo" value="$cd.titulo"><br>
<label for="ano">
Ano Lancamento
</label>
<select name="anoLancamento" id="anoLancamento">
#if($anos != "")
#foreach($ano in $anos) <option value="$ano">$ano</option>
#end
#else<option value=$cd.anoLancamento>$cd.anoLancamento</option>
#end
</select>
<br>
<label for="preco">Preco</label>
<input type="text" name="preco" id="preco" value=$cd.preco><br>
<input type="submit" value="Salvar">
</form>
#parse("rodape.vm")
</body>
</head>
</html>
E meu objeto Cd (Model) está com a classe dessa forma definida:
package com.velocity.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name="CD", schema="virtualstore")
public class Cd implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Integer id_cd;
@Column
@org.hibernate.validator.constraints.NotEmpty(message="O genero não foi informado.")
@Size(min = 2, max = 50)
private String genero;
@Column
@NotEmpty(message="O cantor não foi informado.")
@Size(min = 2, max = 30, message="O cantor foi informado com apenas 1 ou com mais de 30 caracteres.")
private String cantor;
@Column
@NotEmpty(message="O titulo não foi informado.")
@Size(min = 2, max = 50, message="O título foi informado com apenas 1 caractere ou com mais de 50 caracteres.")
private String titulo;
@Column(name = "ano")
@NotEmpty(message="O ano de lançamento não foi informado.")
private String anoLancamento;
@Column
@NotNull(message="O preco não foi informado.")
@Min(value=1, message="O preço foi informado com o valor 0.")
@DecimalMax(value="999999.99", message="O preço foi informado com o valor 1234567,568.")
private Double preco;
public Integer getId_cd() {
return id_cd;
}
public void setId_cd(int id_cd) {
this.id_cd = id_cd;
}
public String getGenero() {
return genero;
}
public void setGenero(String genero) {
this.genero = genero;
}
public String getCantor() {
return cantor;
}
public void setCantor(String cantor) {
this.cantor = cantor;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getAnoLancamento() {
return anoLancamento;
}
public void setAnoLancamento(String anoLancamento) {
this.anoLancamento = anoLancamento;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
}
Sempre que altero ele cria um novo objeto no banco, com um novo ID e mantem o antigo.
Alguém sabe o que pode ser? Obrigado desde já.
Atenciosamente,