Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Recebendo objeto com os campos "Null"

Olá. Estou criando um CRUD com base no que aprendi no curso de spring MVC, porém sempre que entro no formulário para adicionar um objeto no banco de dados, ele é adicionado com os campos vazios, "null". Gostaria de ajuda.

Segue abaixo o formulário

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<c:url value="/" var="contextPath" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cadastro de Visitantes</title>
</head>
<body>

    <h1>Cadastro de Visitantes</h1>

    <form action="${s:mvcUrl('VC#grava').build() }" method="post"
        enctype="multipart/form-data">
        <div class="form-group">
            <label>Nome</label> <input type="text" name="nome" />
        </div>
        <div class="form-group">
            <label>Documento</label> <input type="text" name="documento" />
        </div>
        <div class="form-group">
            <label>Placa do Veículo</label> <input type="text" name="placa" />
        </div>
        <div class="form-group">
            <label>Destino de Visita</label> <input type="text" name="destino" />
        </div>
        <div class="form-group">
            <label>Foto</label> <input type="file" name="foto"
                class="form-control" />
        </div>
        <button type="submit" class="btn btn-primary">Cadastrar</button>
    </form>

</body>
</html>

O Controller

@RequestMapping("/visitantes")
@Controller
public class VisitantesController {

    @Autowired
    private VisitanteDAO visitanteDao;

    @RequestMapping("/form")
    public String form() {
        return "visitantes/form";
    }

    @RequestMapping(method=RequestMethod.POST)
    public String grava(Visitante visitante) {
        System.out.println("visitante controller" + visitante);
        visitanteDao.gravar(visitante);

        return "visitantes/ok";
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView lista() {
        List<Visitante> visitantes = visitanteDao.lista();
        ModelAndView modelAndView = new ModelAndView("visitantes/lista");
        modelAndView.addObject("visitantes", visitantes);
        return modelAndView;
    }
}

O DAO

@Repository
@Transactional
public class VisitanteDAO {

    @PersistenceContext
    private EntityManager manager;

    public void gravar(Visitante visitante) {
        System.out.println("visitanteDao" + visitante);
        manager.persist(visitante);
    }

    public List<Visitante> lista() {
        return manager.createQuery("select v from Visitante v", Visitante.class).getResultList();
    }

}

O Modelo

@Entity
public class Visitante {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int id;

    public String nome;
    public String documento;
    public String placa;
    public String destino;

public Visitante(String nome, String documento, String placa, String destino) {
        this.nome = nome;
        this.documento = documento;
        this.placa = placa;
        this.destino = destino;
    }

    public Visitante() {
    }

    @Override
    public String toString() {
        return "Visitante [nome=" + nome + ", documento=" + documento + ", placa=" + placa + ", destino=" + destino
                + "]";
    }
}
3 respostas
solução!

Boa noite, Felipe! Como vai?

O enctype="multipart/form-data" do form está configurado para fazer upload da foto, mas o seu controller não está pronto para trabalhar com upload de arquivo.

Remova o enctype do form e o campo de foto que ainda não está na sua classe de modelo e experimente fazer o envio novamente do formulário.

Quando puder, me diz aqui se tudo funcionou como vc esperava fazendo esses passos.

Primeiro vamos resolver esse problema inicial que é a motivação do tópico! Se o seu objetivo final for fazer upload de arquivo a gente resolve mais pra frente!

Grande abraço e bons estudos!

Grande, Gabriel. Muito obrigado, era exatamente isso. Foi só remover o enctype.

Ótimo, Felipe! Tópico carimbado com sucesso! hahahaha

Sempre que tiver qualquer dúvida não hesite em procurar o pessoal aqui no fórum!

Grande abraço e bons estudos!