Erro Update

0 respostas
Arizoide

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,

Criado 28 de novembro de 2012
Respostas 0
Participantes 1