[Resolvido]Curso FJ-21 Caelum Cap 11: Spring MVC

Caros,

Companheiros continuo eu em minha heroica jornada para alcançar o poder Jedi do Java. :wink:

Mexendo nos códigos da apostila da Caelum me veio uma dúvida, estou procurando na internet mas ate agora não achei a reposta.

Seguinte:

Temos o código de uma página web.

[code]

Adicionar tarefas

Descrição:

[/code]

Quem chama este controlador.

@Controller
public class TarefasController {
@RequestMapping("adicionaTarefa")
public String adiciona() {
TarefaDAO dao = new TarefaDAO();
dao.adiciona(tarefa);
return "tarefa-adicionada";
}
}

A página web passa para o controlador uma string, textarea name="descricao" , mas no método do controlador é chamado o método que adiciona uma classe,

dao.adiciona(tarefa); ,

Como a “variável vira uma classe” ? Quer dizer foi passada uma string e o método adiciona passa uma classe por parametro.

@RequestMapping("adicionaTarefa") public String adiciona(Tarefa tarefa) { TarefaDAO dao = new TarefaDAO(); dao.adiciona(tarefa); return "tarefa/adicionada"; }

Seu método adiciona não seria como mostrado acima?

Na sua classe Tarefa existe um atributo chamado descricao, certo? O que o Spring MVC faz, ele cria o objeto para você e insere o valor que veio do seu formulário, note que no seu form tem o textarea que contém o valor “descricao”. Seria como ele fizesse isso:

Tarefa tarefa = new Terefa();
tarefa.setDescricao("descrição vinda do form");

Aí com o objeto criado, ele passa para o Dao.

Se eu estiver falando besteira, alguém me corrija por favor.

Voce precisaria criar uma classe DAO para executar a função adiciona do controlador
ai sim vc insere o campo descricao em um objeto do tipo tarefa
o meu ficou assim:

package br.com.peu.tarefas.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.peu.tarefas.connection.ConnectionFactory;
import br.com.peu.tarefas.modelo.Tarefa;

public class TarefaDAO {

private Connection connection;

public TarefaDAO() {
	try{
		connection = new ConnectionFactory().getConnection();

	}catch(ClassNotFoundException e){
		throw new RuntimeException(e);
	}
}

public void adiciona(Tarefa tarefa) {
	String sql = "insert into tarefa (descricao, finalizado) " + "values (?,?)";

	try {
		PreparedStatement stmt = this.connection.prepareStatement(sql);
		stmt.setString(1, tarefa.getDescricao());
		stmt.setBoolean(2, tarefa.isFinalizado());
		
		stmt.execute();
		stmt.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}

}

Obs:Sou novo no Forum desculpe qualquer besteira

olá, camarada…boa tarde!!

estou parado no exercício 11.20…poderia me dar uma ajuda!!!

quando chamo a página de listagem de tarefas, após ter feito todo o exercício de ajax, recebo o seguinte erro: “Configuration problem: Cannot locate BeanDefinitionParser for element [resources]”…Offending resource: ServletContext resource [WEB-INF/spring-context.xml

Desde já, agradeço pela atenção!!

[quote=leonardoteles]olá, camarada…boa tarde!!

estou parado no exercício 11.20…poderia me dar uma ajuda!!!

quando chamo a página de listagem de tarefas, após ter feito todo o exercício de ajax, recebo o seguinte erro: “Configuration problem: Cannot locate BeanDefinitionParser for element [resources]”…Offending resource: ServletContext resource [WEB-INF/spring-context.xml

Desde já, agradeço pela atenção!![/quote]

Abre um topico e posta teu codigo, seu puder ajuda. =)

Na sua classe Tarefa existe um atributo chamado descricao, certo? O que o Spring MVC faz, ele cria o objeto para você e insere o valor que veio do seu formulário, note que no seu form tem o textarea que contém o valor “descricao”. Seria como ele fizesse isso:

Tarefa tarefa = new Terefa();
tarefa.setDescricao("descrição vinda do form");

Aí com o objeto criado, ele passa para o Dao.

Se eu estiver falando besteira, alguém me corrija por favor.
[/quote]

Oi cara,

Não falou besteira não é isso mesmo, na propria apostila da Caelum tem a explicação.

“Uma das grandes vantagens de frameworks modernos é que eles conseguem popular os objetos para nós.
Basta que de alguma forma, nós façamos uma ligação entre o campo que está na tela com o objeto que
queremos popular. E com o Spring MVC não é diferente.
Essa ligação é feita através da criação de um parâmetro do método adiciona. Esse parâmetro é o objeto que
deverá ser populado pelo Spring MVC com os dados que vieram da requisição.”