3
respostas

Erro no form após alterações - Invalid property 'precos[0].valor'

Depois que alterei o código conforme o exercício, o seguinte erro apareceu:

org.springframework.beans.NotReadablePropertyException: Invalid property 'precos[0].valor' of bean class [br.com.eduardo.casadocodigo.loja.models.Produto]: Bean property 'precos[0].valor' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

segue form

<%@ 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://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Livros de Java, Android, iPhone, PHP, Ruby e muito mais - Casa do Código</title>
</head>
<body>         
    <form:form action="${s:mvcUrl('PC#gravar').build()}" method="POST" commandName="produto">
        <div>
            <label>Título</label>
            <form:input  path="titulo" />
            <form:errors path="titulo" />
        </div>

        <div>
            <label>Descrição</label>
            <form:textarea rows="10" cols="20" path="descricao"/>
            <form:errors path="descricao" />
        </div>

        <div>
            <label>Páginas</label>
            <form:input path="paginas" />
            <form:errors path="paginas" />
        </div>

        <div> 
            <label>Data de Lançamento</label>
            <form:input path="dataLancamento" />
            <form:errors path="dataLancamento" />
        </div>

        <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
            <div>
                <label>${tipoPreco}</label>
                <form:input path="precos[${status.index}].valor" />
                <form:hidden path="precos[${status.index}].tipo" value="${tipoPreco}"/>
            </div>
        </c:forEach>

        <button type="submit">Cadastrar</button>
    </form:form>
</body>
</html>

e método conversor

@Bean
    public FormattingConversionService mvcConversionService() {
        DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
        DateFormatterRegistrar registrar = new DateFormatterRegistrar();
        registrar.setFormatter(new DateFormatter("dd/MM/yyyy"));
        registrar.registerFormatters(conversionService);

        return conversionService;
    }

Alguém pode me ajudar?

3 respostas

Oi Eduardo, tudo bem?

Coloca o código da sua classe Produto para darmos uma olhadinha?

Abraço!

Boa noite Joviane, tudo bem?

Desculpe responder agora,

Segue minha classe Produto.java

package br.com.eduardo.casadocodigo.loja.models;

import java.util.Calendar;
import java.util.List;

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

import org.springframework.format.annotation.DateTimeFormat;

@Entity
public class Produto {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
    private String titulo;
    @Lob
    private String descricao;
    private Integer paginas;

    @DateTimeFormat
    private Calendar dataLancamento;

    @ElementCollection
    private List<Preco> precos;

    public List<Preco> getPrecos() {
        return precos;
    }

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

    public Calendar getDataLancamento() {
        return dataLancamento;
    }

    public void setDataLancamento(Calendar dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    public Integer getId() {
        return id;
    }

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

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getTitulo() {
        return titulo;
    }

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

    public String getDescricao() {
        return descricao;
    }

    public void setPaginas(Integer paginas) {
        this.paginas = paginas;
    }

    public Integer getPaginas() {
        return paginas;
    }

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

}

Ainda estou sem solução. Alguém passando por esse problema e que conseguiu resolver?