3
respostas

Salvar tipos usando select

Boa tarde, estou com uma dúvida, criei a seguinte classe:

@Entity public class Chave {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Integer numero;
private StatusChave status  = StatusChave.DISPONIVEL;

@ManyToOne
private Biblioteca biblioteca = new Biblioteca();

private TipoChave tipo;

public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public Integer getNumero() {
    return numero;
}
public void setNumero(Integer numero) {
    this.numero = numero;
}
public StatusChave getStatus() {
    return status;
}
public void setStatus(StatusChave status) {
    this.status = status;
}
public Biblioteca getBiblioteca() {
    return biblioteca;
}
public void setBiblioteca(Biblioteca biblioteca) {
    this.biblioteca = biblioteca;
}
public TipoChave getTipo() {
    return tipo;
}
public void setTipo(TipoChave tipo) {
    this.tipo = tipo;
}

}

E esse formulário para persistir os dados:

<form:form servletRelativeAction="${s:mvcUrl('CC#gravar').build() }" method="POST">

Número
Biblioteca
  • <c:forEach items="${bibliotecas }" var="biblioteca">
                  <option value="${biblioteca }">${biblioteca.nome }</option>
    
              </c:forEach>
    
               </select>
        </div>
        <button type="submit" class="btn btn-primary">Cadastrar</button>
    </form:form>
  • 3 respostas

    Porém não consigo salvar o atributo biblioteca, esse é o meu controller:

    @Controller @RequestMapping("/chaves") public class ChavesController {

    @Autowired
    private ChaveDAO chaveDao;
    
    @Autowired
    private BibliotecaDAO bibliotecaDao;
    
    @RequestMapping("/form")
    public ModelAndView form() {
        List<Biblioteca> bibliotecas = bibliotecaDao.listar();
        ModelAndView modelAndView = new ModelAndView("chave/form");
        modelAndView.addObject("bibliotecas", bibliotecas);
    
    
        return modelAndView;
    }
    
    @RequestMapping("/gravar") 
    public String gravar(Chave chave) {
        System.out.println(chave.getBiblioteca());
    
        //chave.getBiblioteca().setId(bibliotecaDao.find(4).getId());
        //System.out.println(bibliotecaDao.find(chave.getBiblioteca().getId()).getNome());
        //chave.getBiblioteca().setId(idBiblioteca);
        System.out.println();
        chaveDao.gravar(chave);
        System.out.println(chave.getTipo());
        System.out.println(chave.getBiblioteca());
        return "/chave/ok";
    }

    }

    Alguém poderia me ajudar?

    Não entendi muito bem amigo, o objeto Chave não está chegando no método gravar do seu controller?

    O problema era o objeto biblioteca. Mas foi vacilo meu, o problema era a q o form só passa o id, eu preciso fazer um "find" com o id para retornar a referência a biblioteca para então persistir no banco. Consegui resolver. Valeu Otávio.