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

Erro ao acessas a listagem de contas Aula 4

Ao acessar a url: http://localhost:8080/contas/listaContas retorna o seguinte erro:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: No enum constant br.com.caelum.contas.modelo.TipoDaConta.ENTRADA

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
    <table style="height: 10px; width: 775px;" border="1">
        <tr>
        <th>Código</th>
        <th>Descrição</th>
        <th>Valor</th>
        <th>Tipo</th>
        <th>Paga?</th>
        <th>Data de pagamento</th>
        </tr>

        <c:forEach items="${contas}" var="conta">
        <tr>
            <td>${conta.id}</td>
            <td>${conta.descricao}</td>
            <td>${conta.valor}</td>
            <td>${conta.tipo}</td>
            <td id="conta_${conta.id}">
                <c:if test="${conta.paga eq false}">
                    Não paga
                </c:if>
                <c:if test="${conta.paga eq true }">
                    Paga!
                </c:if>
            </td>
            <td><fmt:formatDate value="${conta.dataPagamento.time}" pattern="dd/MM/yyyy"/></td>
        </tr>        
        </c:forEach>
    </table>

</body>
</html>

Controller:

package br.com.caelum.contas.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.caelum.contas.dao.ContaDAO;
import br.com.caelum.contas.modelo.Conta;

@Controller
public class ContaController {

    @RequestMapping(value="/form")
    public String form(){

        return "conta/formulario";
    }

    @RequestMapping("/adicionaConta")
    public String adiciona(Conta conta) {

        ContaDAO dao = new ContaDAO();

        dao.adiciona(conta);

        return "conta/conta-adicionada";
    }

    @RequestMapping("/listaContas")
    public String lista(){

       ContaDAO dao = new ContaDAO();

         List<Conta> contas = dao.lista();

         ModelAndView mv = new ModelAndView();

         mv.addObject("contas",contas);

        return "mv";
    }

}
3 respostas

eu não consegui associar o erro a url que vc ta acessando.. de todo jeito, existe essa enum que ele ta reclamando?

Sim existe, no início do curso tem um exercício que mostra como importar o projeto, a Enum já veio criada no projeto.

Segue:

TipoDaConta:

package br.com.caelum.contas.modelo;

public enum TipoDaConta {
    ENTRADA,SAIDA;
}

Configuração no spring-context:

 <bean id="conversionService"
          class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="br.com.caelum.contas.StringToEnumConverterFactory"/>
            </list>
        </property>
    </bean>

No outro arquivo:

package br.com.caelum.contas;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;

@SuppressWarnings({"rawtypes", "unchecked"})
final class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {

    public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
        return new StringToEnumConverter(targetType);
    }

    private final class StringToEnumConverter<T extends Enum> implements Converter<String, T> {

        private Class<T> enumType;

        public StringToEnumConverter(Class<T> enumType) {
            this.enumType = enumType;
        }

        public T convert(String source) {
            return (T) Enum.valueOf(this.enumType, source.trim());
        }
    }
}

Classe conta:

package br.com.caelum.contas.modelo;

import java.util.Calendar;


public class Conta {

    private Long id;

    private String descricao;

    private boolean paga;

    private double valor;

    private Calendar dataPagamento;

    private TipoDaConta tipo;


    public Long getId() {
        return id;
    }

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

    public String getDescricao() {
        return descricao;
    }

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

    public boolean isPaga() {
        return paga;
    }

    public void setPaga(boolean paga) {
        this.paga = paga;
    }

    public Calendar getDataPagamento() {
        return dataPagamento;
    }

    public void setDataPagamento(Calendar dataPagamento) {
        this.dataPagamento = dataPagamento;
    }



    public double getValor() {
        return valor;
    }    

    public void setValor(double valor) {
        this.valor = valor;
    }

    public TipoDaConta getTipo() {
        return tipo;
    }

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


}
solução!

ah, esse é o curso mais antigo.. na versão mais nova do spring mvc não precisa mais desse converter especial aí. Enfim, coloca um breakpoint ou syso no converter, verifica o valor que ta chegando e tenta descobrir quem ta enviando o parâmetro.

To tentando achar a fonte do erro, por mais que ele esteja claro, não to sacando de onde vem.

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