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

NullPointer no exercício 3 do capítuto 3.

Quando aperto o botão enviar no formulário da um NullPointerException, a pilha indica a execeção iniciada em ContaDAO.java:35, onde é feita a preparação da query de inserção dentro do método adiciona, será que o problema esta no arquivo spring-context.xml?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                        http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="br.com.caelum.contas" />
    <mvc:annotation-driven />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <bean id= "conversionService" class= "org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class= "br.com.caelum.contas.StringToEnumConverterFactory" />
            </list>
        </property>
    </bean>
</beans>

Segue também o controller

package br.com.caelum.contas.controller;

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

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

@Controller
public class ContaController {
    @RequestMapping("/form")
    public String formulario(){
        return "formulario";
    }
    @RequestMapping("/adicionaConta")
    public String action(Conta conta){
         ContaDAO dao = new ContaDAO();
         dao.adiciona(conta);
        return "conta-adicionada";
    }
}

E o metodo adiciona de ContaDAO

public void adiciona(Conta conta) {
        String sql = "insert into contas (descricao, paga, valor, tipo) values (?,?,?,?)";
        PreparedStatement stmt;
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, conta.getDescricao());
            stmt.setBoolean(2, conta.isPaga());
            stmt.setDouble(3, conta.getValor());
            stmt.setString(4, conta.getTipo().name());///A exception acontece aqui
            stmt.execute();
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

Obrigado!

7 respostas

Bom dia Adones,

Poderia por favor mandar o código da jsp formulario referente ao return que você está mandando também?

Ai está formulário Guilherme

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>Adicionar Contas</h3>
<form action="adicionaConta" method="post">
 Discricão : <br/>
 <textarea name ="descricao" rows="5" cols="100">  </textarea><br/>
 Valor : <input type = "text" name = "valor"/><br/>
 Tipo : 
 <select>
 <option value = "ENTRADA">Entrada</option>
 <option value = "SAIDA">Saida</option>

 </select>
<br/><br/>
<input type="submit" value="Adicionar"/>
</form>
</body>
</html>

Aparentemente seu formulário manda os atributo certo para o DAO, mas tente retirar os espaços de type e de name, de valor

faça

Valor : <input type="text" name="valor"/><br/>

Tentei não resolveu.

Muito obrigado Guilherme, pela atenção.

Você conseguiu resolver o problema?

solução!

Sim eu tinha esquecido de definir o name no select do formulário, vacilo! Vlw muito obrigado cara.