I cannot save form using spring boot

Asked

Viewed 303 times

0

I’m starting to study spring boot now and trying to do a CRUD, but I’m having a hard time saving my form. No error message appears, neither in the console nor in the browser. I have already reviewed code and can not find the error, someone can help me?

My user model:

package com.bigboss.comprafacil.models;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

import com.bigboss.comprafacil.enuns.Status;

@Entity
public class Usuario implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NotBlank(message = "Nome é uma informação obrigatória.")
@Size(min = 2, max = 30)
private String nome;
private String nomeFantasia;
@NotBlank(message = "Rua é uma informação obrigatória.")
private String rua;
@NotBlank(message = "Bairro é uma informação obrigatória.")
private String bairro;
@NotBlank(message = "Número é uma informação obrigatória.")
private String numero;
@NotBlank(message = "Complemento é uma informação obrigatória.")
private String complemento;
@NotBlank(message = "Estado é uma informação obrigatória.")
private String estado;
@NotBlank(message = "Cidade é uma informação obrigatória.")
private String cidade;
private String pais;
@NotBlank(message = "É uma informação obrigatória.")
private String cnpjCpf;
@NotBlank(message = "Telefone é uma informação obrigatória.")
private String telefone;
public String funcao;
public String categoria;
@NotBlank(message = "E-mail é uma informação obrigatória.")
@Email(message = "Não é um e-mail válido")
private String email;
@Size(min = 4, max = 15)
@NotBlank(message = "Senha é uma informação obrigatória.")
private String senha;

public long getId() {
    return id;
}

public String getCategoria() {
    return categoria;
}

public void setCategoria(String categoria) {
    this.categoria = categoria;
}

public void setId(long id) {
    this.id = id;
}

public String getEstado() {
    return estado;
}

public void setEstado(String estado) {
    this.estado = estado;
}

public List<Produto> getProdutos() {
    return produtos;
}

public void setProdutos(List<Produto> produtos) {
    this.produtos = produtos;
}

@Enumerated(EnumType.STRING)
public Status status;

public Usuario() {
    status = Status.ATIVO;
}

@ManyToMany
@JoinTable(name = "usuarios_produtos", joinColumns = @JoinColumn(name = "usuario_id", referencedColumnName = "email"), inverseJoinColumns = @JoinColumn(name = "produto_id", referencedColumnName = "id"))
private List<Produto> produtos;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getNomeFantasia() {
    return nomeFantasia;
}

public void setNomeFantasia(String nomeFantasia) {
    this.nomeFantasia = nomeFantasia;
}

public String getRua() {
    return rua;
}

public void setRua(String rua) {
    this.rua = rua;
}

public String getBairro() {
    return bairro;
}

public void setBairro(String bairro) {
    this.bairro = bairro;
}

public String getNumero() {
    return numero;
}

public void setNumero(String numero) {
    this.numero = numero;
}

public String getComplemento() {
    return complemento;
}

public void setComplemento(String complemento) {
    this.complemento = complemento;
}

public String getCidade() {
    return cidade;
}

public void setCidade(String cidade) {
    this.cidade = cidade;
}

public String getPais() {
    return pais;
}

public void setPais(String pais) {
    this.pais = pais;
}

public String getCnpjCpf() {
    return cnpjCpf;
}

public void setCnpjCpf(String cnpjCpf) {
    this.cnpjCpf = cnpjCpf;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    this.senha = senha;
}

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

public String getFuncao() {
    return funcao;
}

public void setFuncao(String funcao) {
    this.funcao = funcao;
}

public static long getSerialversionuid() {
    return serialVersionUID;
}

}

My User Interface

package com.bigboss.comprafacil.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.bigboss.comprafacil.models.Usuario;

public interface UsuarioRepository extends JpaRepository<Usuario, Long>{

}

My User Service

package com.bigboss.comprafacil.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bigboss.comprafacil.models.Usuario;
import com.bigboss.comprafacil.repository.UsuarioRepository;

@Service
public class UsuarioService {

@Autowired
private UsuarioRepository repository;

public  List<Usuario> findAll() {
    return repository.findAll();
}

public Usuario findOne(Long id) {
    return repository.getOne(id);
}

public Usuario save(Usuario usuarios) {
    return repository.saveAndFlush(usuarios);
}

public void delete(Long id) {
    repository.deleteById(id);
}

}

My controller

package com.bigboss.comprafacil.controller;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.bigboss.comprafacil.models.Usuario;
import com.bigboss.comprafacil.service.UsuarioService;

@Controller
@RequestMapping("/fornecedor")
public class UsuarioController {

@Autowired
private UsuarioService service;

@RequestMapping("/cadastrarFornecedor")
public ModelAndView add(Usuario usuarios) {
    ModelAndView mv = new ModelAndView("fornecedor/form");
    System.out.println("--------fornecedor: " + usuarios.getId());
    mv.addObject("usuarios", usuarios);
    return mv;
}

@GetMapping("/edit/{id}")
private ModelAndView edit(@PathVariable("id") Long id) {
    Usuario usuarios = service.findOne(id);
    return add(usuarios);
}

@GetMapping("/delete/{id}")
private ModelAndView delete(@PathVariable("id") Long id) {
    service.delete(id);
    return findAll();
}

@GetMapping("/lista")
private ModelAndView findAll() {
    ModelAndView mv = new ModelAndView("fornecedores/lista");
    mv.addObject("usuarios", service.findAll());
    return mv;
}

@PostMapping("/save")
public ModelAndView save(@Valid Usuario usuarios, BindingResult result, RedirectAttributes attributes) {

    if (result.hasErrors()) {
        attributes.addFlashAttribute("mensagem", "Verifique os campos!");
        System.out.println("--------erro ao salvar: " + usuarios.getId());
        return add(usuarios);
    }
    service.save(usuarios);
    attributes.addFlashAttribute("mensagem", "Evento cadastrado com sucesso!");
    return findAll();
}
}

My html form.

<!DOCTYPE html>

Suppliers Register of suppliers

<section class="forms">
    <form th:object="${usuario}" th:action="@{/fornecedor/save}"
        method="POST" enctype="multipart/form-data">
        <!--Input responsável em guardar o id-->

        <div class="container-fluid">
            <div class="row">
                <input id="id" name="id" type="hidden" th:field="*{id}"
                    th:value="*{id}">
                <div class="col-lg-6">
                    <div class="form-group">
                        <label>Nome do empreendimento:</label> <input type="text"
                            name="nome" th:field="*{nome}" id="inputNome"
                            class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Nome fantasia:</label> <input type="text"
                            name="nomeFantasia" th:field="*{nomeFantasia}"
                            class="form-control" id="inputNomeFantasia">
                    </div>
                    <div class="form-group">
                        <label>Rua:</label> <input type="text" name="rua"
                            th:field="*{rua}" id="inputRua" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Bairro:</label> <input type="text" name="bairro"
                            th:field="*{bairro}" id="inputBairro" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Complemento:</label> <input type="text" name="complemento"
                            th:field="*{complemento}" id="inputComplemento"
                            class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Cidade:</label> <input type="text" name="cidade"
                            th:field="*{cidade}" id="inputCidade" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Estado:</label> <select name="estado" class="form-control"
                            th:field="*{estado}" id="inputEstado">
                            <option th:value="AC">Acre</option>
                            <option value="AL">Alagoas</option>
                            <option value="AP">Amapá</option>
                            <option value="AM">Amazonas</option>
                            <option value="BA">Bahia</option>
                            <option value="CE">Ceará</option>
                            <option value="DF">Distrito Federal</option>
                            <option value="ES">Espírito Santo</option>
                            <option value="GO">Goiás</option>
                            <option value="MA">Maranhão</option>
                            <option value="MT">Mato Grosso</option>
                            <option value="MS">Mato Grosso do Sul</option>
                            <option value="MG">Minas Gerais</option>
                            <option value="PA">Pará</option>
                            <option value="PB">Paraíba</option>
                            <option value="PR">Paraná</option>
                            <option value="PE">Pernambuco</option>
                            <option value="PI">Piauí</option>
                            <option value="RJ">Rio de Janeiro</option>
                            <option value="RN">Rio Grande do Norte</option>
                            <option value="RS">Rio Grande do Sul</option>
                            <option value="RO">Rondônia</option>
                            <option value="RR">Roraima</option>
                            <option value="SC">Santa Catarina</option>
                            <option value="SP">São Paulo</option>
                            <option value="SE">Sergipe</option>
                            <option value="TO">Tocantins</option>
                        </select>
                    </div>
                </div>

                <div class="col-lg-6">
                    <div class="form-group">
                        <label>Telefone:</label> <input type="text" placeholder=""
                            th:field="*{telefone}" id="inputTelefone" name="telefone"
                            class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Categoria:</label> <select name="categoria" class="form-control"
                            th:field="*{categoria}" id="inputCategoria">
                            <option value="Farmarcias">Farmacias</option>
                            <option value="Lanchonetes">Lanchonetes</option>
                            <option value="Material de construçao">Material de Construçao</option>
                            <option value="Restaurantes">Restaurantes</option>
                            <option value="Pizzarias">Pizzarias</option>

                        </select>
                    </div>
                    <div class="form-group">
                        <label>Adicionar foto do perfil:</label> <input type="file"
                            name="" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Email:</label> <input type="email" name="email"
                            th:field="*{email}" id="inputEmail" class="form-control"
                            placeholder="[email protected]">
                    </div>
                    <div class="form-group">
                        <label>Senha:</label> <input type="password" name="senha"
                            th:field="*{senha}" id="inputSenha" class="form-control"
                            placeholder="Mínimo 6 caracteres">
                    </div>
                    <div class="form-group">
                        <label>Confirmar senha:</label> <input type="password"
                            placeholder="Mínimo 6 caracteres" name="senha"
                            class="form-control">
                    </div>
                </div>
                <div class="col-lg-12">
                    <button type="submit" class="btn btn-primary">Salvar</button>
                    <button type="reset" class="btn btn-danger"
                        onclick="window.location.href='/funcionarios/listar';">
                        Cancelar</button>
                </div>

            </div>
        </div>

    </form>
</section>
<script type="text/javascript">
    $(document).ready(function() {
        $(".dropdown-toggle").dropdown();
    });
</script>

1 answer

1


I believe you missed the transaction.

try placing the @Transactional annotation on your save service.

@Transactional
public Usuario save(Usuario usuarios) {
    return repository.saveAndFlush(usuarios);
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.