Boa noite senhores,
Meu nome é Rafael e estou usando uma tag do spring que é para carregar uma select de departamentos. Basicamente seria um formulário de empregados e nele, uma select de departamentos é carregada. Só que, infelizmente, não estou conseguindo levar o id do departamento para a tabela empregado. Gostaria, que alguém me orientasse em como resolver esse problema.
segue abaixo a linha de código:
Arquivo add.js
<div class="form-group">
<label for="for_depatamento">Departamento</label>
<form:select path="departamento" cssClass="form-control">
<form:options items="${departamentos}" itemValue="id" itemLabel="nome"></form:options>
</form:select>
</div>
Controller de Empregado
@Controller
@RequestMapping(value="/empregado")
public class EmpregadoController {
@Autowired
private EmpregadoDAO empDAO;
@Autowired
private DepartamentoDAO depDAO;
@RequestMapping(value="/add", method=RequestMethod.GET)
public ModelAndView addEmpregado(@ModelAttribute("empregado") Empregado empregado,
ModelMap model) {
model.addAttribute("departamentos", depDAO.getListAllDepartamentoDAO());
return new ModelAndView("empregado/add", model);
}
@RequestMapping(value="/save", method = RequestMethod.POST)
public ModelAndView saveEmpregado(@ModelAttribute("empregado") Empregado umEmpregado,
BindingResult result,
RedirectAttributes attr) {
ModelAndView model;
System.out.println("Empregado" + umEmpregado);
if(result.hasErrors()) {
model = new ModelAndView("/empregado/add");
}
empDAO.saveEmpregadoDAO(umEmpregado);
attr.addFlashAttribute("message","Registro inserido com sucesso");
model = new ModelAndView("redirect:/empregado/add");
return model;
}
...
A classe de persistencia EmpregadoDAOImpl
@Repository
@Transactional
public class EmpregadoDAOImpl implements EmpregadoDAO{
@PersistenceContext
EntityManager manager = null;
@Override
public void saveEmpregadoDAO(Empregado umEmpregado) {
manager.persist(umEmpregado);
}
...
A classe Empregado
package br.com.metatron.models;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "Empregado")
public class Empregado {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "matricula", nullable = false, length = 20)
private String matricula;
@Column(name = "CPF", nullable = false, length = 20)
private String CPF;
@Column(name = "nome" , nullable = false, length = 100)
private String nome;
@Column(name = "endereco", nullable = false, length = 100)
private String endereco;
@ManyToOne
private Departamento departamento;
Os métodos get e sets foram omitidos. Quando executo o sistema ele me mostra a seguinte messagem: NullPointerException.
EmpregadoEmpregado [id=null, matricula=201608155705, CPF=123456789, nome=Maria Kiteria, endereco=Rua Furtado de Mendonça, departamento=null]
Hibernate:
insert
into
Empregado
(CPF, departamento_id, endereco, matricula, nome)
values
(?, ?, ?, ?, ?)
Hibernate:
select
departamen0_.id as id1_0_,
departamen0_.nome as nome2_0_,
departamen0_.sigla as sigla3_0_
from
departamento departamen0_
Como pode ser visto acima, o departamento é passado como null. Sendo inserido o banco de dados assim mesmo.
Muito obrigado pela sua atenção Rafael