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

Não consigo cadastrar pedidos

Eu preencho todas as informações dos campos, mas quando vou verificar na página home.html aparece os cadastros todos vazios. Print abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Código da RequisicaoNovoPedido

package br.com.alura.mvc.mudi.dto;

import br.com.alura.mvc.mudi.model.Pedido;

public class RequisicaoNovoPedido {

    private String nomeProduto;
    private String urlProduto;
    private String urlImagem;
    private String descricao;

    public String getNomeProduto() {
        return nomeProduto;
    }

    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }

    public String getUrlProduto() {
        return urlProduto;
    }

    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }

    public String getUrlImagem() {
        return urlImagem;
    }

    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Pedido toPedido() {
        Pedido pedido = new Pedido();
        pedido.setDescricao(descricao);
        pedido.setNomeProduto(nomeProduto);
        pedido.setUrlImagem(urlImagem);
        pedido.setUrlProduto(urlProduto);
        return pedido;
    }
}

Código da PedidoController

package br.com.alura.mvc.mudi.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.alura.mvc.mudi.dto.RequisicaoNovoPedido;
import br.com.alura.mvc.mudi.model.Pedido;
import br.com.alura.mvc.mudi.repository.PedidoRepository;

@Controller
@RequestMapping("pedido") //todas as requisições de pedido virão para cá
public class PedidoController {

    @Autowired
    private PedidoRepository pedidoRepository;

    @GetMapping("formulario")
    public String formulario() {
        return "pedido/formulario";
    }

    @PostMapping("novo")
    public String novo(RequisicaoNovoPedido requisicao) {

        Pedido pedido = requisicao.toPedido();
        pedidoRepository.save(pedido);

        return "pedido/formulario";
    }
}

Código do Pedido

package br.com.alura.mvc.mudi.model;

import java.math.BigDecimal;
import java.time.LocalDate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Pedido {

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

    private String nomeProduto;
    private BigDecimal valorNegociado;
    private LocalDate dataDaEntrega;
    private String urlProduto;
    private String urlImagem;
    private String descricao;

    public String getNomeProduto() {
        return nomeProduto;
    }

    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }

    public BigDecimal getValorNegociado() {
        return valorNegociado;
    }

    public void setValorNegociado(BigDecimal valorNegociado) {
        this.valorNegociado = valorNegociado;
    }

    public LocalDate getDataDaEntrega() {
        return dataDaEntrega;
    }

    public void setDataDaEntrega(LocalDate dataDaEntrega) {
        this.dataDaEntrega = dataDaEntrega;
    }

    public String getUrlProduto() {
        return urlProduto;
    }

    public void setUrlProduto(String urlProduto) {
        this.urlProduto = urlProduto;
    }

    public String getUrlImagem() {
        return urlImagem;
    }

    public void setUrlImagem(String urlImagem) {
        this.urlImagem = urlImagem;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
}

Caso precise, deixarei os códigos da página home.html nas respostas.

Por favor me ajudem.

Desde já agradeço.

3 respostas

Códigos do html

<html>
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">

        <div class="jumbotron mb-0">
            <h1 class="display-4">Meus Pedidos</h1>
        </div>

            <nav class="navbar navbar-expand navbar-light bg-light d-flex justify-content-between mb-3">
                <div class="navbar-nav">
                    <a class="nav-item nav-link active" href="">Todos</a>
                    <a class="nav-item nav-link" href="">Aguardando</a>
                    <a class="nav-item nav-link" href="">Aprovado</a>
                    <a class="nav-item nav-link" href="">Entregue</a>
                </div>
                <a href="/pedido/formulario">
                    <button class="btn btn-outline-secondary">Novo</button>
                </a>
            </nav>

                <div class="card" th:each="pedido : ${pedidos}">
                <div class="card-header" th:text="${pedido.nomeProduto}">Nome do produto</div>
                <div class="card-body">
                    <div class="row">
                        <div class="col-12 col-sm-8 mb-3">

                        <div class="row">
                            <div class="col-md-5">Valor do produto: <span th:text="${pedido.valorNegociado}">200,99</span></div>
                            <div class="col-md-7">Data da entrega: <span th:text="${pedido.dataDaEntrega}">10/09/2020</span></div>
                        </div>

                        <div>Produto</div>
                        <div><input class="form-control" th:value="${pedido.urlProduto}" value="url do produto"/></div>

                        <div>Descrição</div>
                        <div>
                            <textarea class="form-control" th:text="${pedido.descricao}">Descrição do pedido</textarea>
                        </div>
                    </div>

                    <div class="col-12 col-sm-4">
                        <div>
                            <img class="img-thumbnail" th:src="${pedido.urlImagem}" src="">
                        </div>
                    </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>
solução!

Talvez no html do formulário, você tenha definidos os nomes dos inputs diferentes dos nomes dos atributos da classe.

Se o atributo da sua classe é "nomeProduto" o name do seu input deve ser escrito da mesma forma.

<input name="nomeProduto" placeholder="nome do produto">

Se os nomes não são os mesmo ele deve esta salvando informações vazias no banco

Funcionou!!!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Muito obrigado!!!