1
resposta

Não insere o campo "tipo" na tabela produto_precos

Boa noite, a aplicação cadastra os produtos e na hora de cadastrar o produto_precos ele não cadastra o campo "tipo".

package br.com.casadocodigo.loja.model;

import java.math.BigDecimal;

import javax.persistence.Embeddable;

@Embeddable
public class Preco {

    private BigDecimal valor;
    private TipoPreco tipo;

    public BigDecimal getValor() {
        return valor;
    }
    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
    public TipoPreco getTipoPreco() {
        return tipo;
    }
    public void setTipoPreco(TipoPreco tipoPreco) {
        this.tipo = tipoPreco;
    }
}
package br.com.casadocodigo.loja.model;

public enum TipoPreco {
    EBOOK, IMPRESSO, COMBO; 
}
package br.com.casadocodigo.loja.model;

import java.util.List;

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

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String titulo;
    private String descricao;
    private int paginas;
    @ElementCollection
    private List<Preco> precos;

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public int getPaginas() {
        return paginas;
    }
    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }

    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
    }

    public List<Preco> getPrecos() {
        return precos;
    }
    public void setPrecos(List<Preco> precos) {
        this.precos = precos;
    }


}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="ISO-8859-1">
        <title>Insert title here</title>
        <!--Import Google Icon Font-->
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"/>
        <!-- Compiled and minified CSS -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">    
        <!-- Compiled and minified JavaScript -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h1 class="center-align">Cadastro de livro</h1>
            <div class="row">
                <div class="col s8 offset-s2">
                    <div class="card">
                        <div class="card-content">
                            <form action="/casadocodigo/produtos" method="POST">
                                <div class="input-field">
                                    <input type="text" name="titulo">
                                    <label>Título</label>
                                </div>
                                <div class="input-field">
                                    <textarea class="materialize-textarea" name="descricao"></textarea>
                                    <label>Descrição</label>
                                </div>
                                <div class="input-field">
                                    <input type="number" name="paginas">
                                    <label>Número de páginas</label>
                                </div>                                
                                <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
                                    <div class="input-field">                                        
                                        <input type="text" name="precos[${status.index}].valor" />
                                        <input type="hidden" name="precos[${status.index}].tipo" value="${tipoPreco}" />
                                        <label>${tipoPreco}</label>
                                    </div>
                                </c:forEach>                                
                                <button class="btn">Cadastrar</button>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>        
    </body>
</html>
1 resposta

O nome dos métodos get e set de tipo precisam ser getTipo e setTipo:

public TipoPreco getTipo() {
        return tipo;
    }

    public void setTipo(TipoPreco tipo) {
        this.tipo = tipo;
    }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software