Struts 2 - Apostila Caelum

Bom eu tentei ir para o próximo exercicio porém , pelo oque eu estou vendo nao vai ser nada facil…

AVISO: Could not find action or result
There is no Action mapped for namespace / and action name removeTarefa. - [unknown location]

Ele gera o 404 .

HTTP Status 404 - There is no Action mapped for namespace / and action name removeTarefa.

Quando eu tento remover alguma tarefa…

Pelo visto não vai dar para passar para o próximo ser resolver esse problema…

Será que tem algo errado com o método que eu uso para listar??

segue meu DAO


package br.com.cfr.jdbc.dao;

  
import java.sql.Connection;
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.cfr.jdbc.ConnectionFactory;
import br.com.cfr.jdbc.modelo.Tarefa;
  
public class TarefaDAO {  
      
    Connection connection;  
      
    public TarefaDAO(){  
        try {
			this.connection = new ConnectionFactory().getConnection();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
    }  
      
    public void adiciona (Tarefa tarefa){  
          
        String sql = "insert into tab_tar (descricao , finalizado) value(?,?)";  
          
        try {  
            PreparedStatement stmt = connection.prepareStatement(sql);  
            stmt.setString(1, tarefa.getDescricao());  
            stmt.setBoolean(2, tarefa.isFinalizado());
              
            stmt.execute();  
            stmt.close();                 
        } catch (SQLException e){  
            throw new RuntimeException (e);  
        }  
          
          
          
    }

	

	public List<Tarefa> lista() {
		try {
			List<Tarefa> tarefas  = new ArrayList<Tarefa>();
			PreparedStatement stmt = this.connection.prepareStatement("select * from tab_tar");
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()){
				
				Tarefa tarefa = new Tarefa();
				tarefa.setId(rs.getLong("id"));
				tarefa.setDescricao(rs.getString("descricao"));
				tarefa.setFinalizado(rs.getBoolean("finalizado"));
				
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("Tarefa"));
				tarefa.setDataFinalizacao(data);
				
				tarefas.add(tarefa);
			}
			rs.close();
			stmt.close();
			return tarefas;	
			
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}	
	}

	public void remove(Tarefa tarefa) {
		
		try {
			PreparedStatement stmt = connection.prepareStatement("delete from tab_tar where id=?");
			stmt.setLong(1, tarefa.getId());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
    }
		
	}
  

Bom obrigado para quem fica, mais eu preciso dormir amanha tenho que acordar cedo para trabalhar , muito OBRIGADO mesmo!!!

Bom se está persistindo e não está recuperando então acho que o erro realmente é no teu código, faz o seguinte, me manda aew ele pra eu dar uma olhada aqui, já fiz isso com outro problema e terminou dando certo vamos ver com o teu…
se quiser pra ficar mais fácil manda pra aqui ow…

Ok , eu estou colocando lá agora.

Bom se você puder me ajudar , muito OBRIGADOOOOOOOOOOOOO!!!

Eu não consigo imagina o erro que possa ser …

CONSEGUI , pelo menos gerar algum erro !!

O meu erro era que eu estava acessando o jsp puro . e não a action .

Porém agora quando eu tento acessar a action acontece isso .

java.lang.RuntimeException: java.sql.SQLException: Column ‘Tarefa’ not found.

Gente eu tenho uma dúvida como eu declaro uma variável BOOLEAN no mySQL ???

Por vias das dúvidas criei uma String mesmo para não dar problema…

segue o código do meu DAO (creio que o erro esteja nele)


package br.com.cfr.jdbc.dao;

  
import java.sql.Connection;
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.cfr.jdbc.ConnectionFactory;
import br.com.cfr.jdbc.modelo.Tarefa;
  
public class TarefaDAO {  
      
    Connection connection;  
      
    public TarefaDAO(){  
        try {
			this.connection = new ConnectionFactory().getConnection();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
    }  
      
    public void adiciona (Tarefa tarefa){  
          
        String sql = "insert into tab_tar (descricao , finalizado) value(?,?)";  
          
        try {  
            PreparedStatement stmt = connection.prepareStatement(sql);  
            stmt.setString(1, tarefa.getDescricao());  
            stmt.setString(2, tarefa.getFinalizado());
              
            stmt.execute();  
            stmt.close();                 
        } catch (SQLException e){  
            throw new RuntimeException (e);  
        }  
          
          
          
    }

	

	public List<Tarefa> lista() {
		try {
			List<Tarefa> tarefas  = new ArrayList<Tarefa>();
			PreparedStatement stmt = this.connection.prepareStatement("select * from tab_tar");
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()){
				
				Tarefa tarefa = new Tarefa();
				tarefa.setId(rs.getLong("id"));
				tarefa.setDescricao(rs.getString("descricao"));
				tarefa.setFinalizado(rs.getString("finalizado"));
				
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("Tarefa"));
				tarefa.setDataFinalizacao(data);
				
				tarefas.add(tarefa);
			}
			rs.close();
			stmt.close();
			return tarefas;	
			
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}	
	}

	public void remove(Tarefa tarefa) {
		
		try {
			PreparedStatement stmt = connection.prepareStatement("delete from tab_tar where id=?");
			stmt.setLong(1, tarefa.getId());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
    }
		
	}
  

Obrigado gente !

Desculpa a demora para pelo menos te dar uma resposta eu vou olhar o que você fez agora e depois te dou um feedback do que pode ser melhorado e quais são os problemas que estão gerando erro, vou dar uma olhada no que você me mandou agora a tarde e te digo se consegui ou não…

Up up up

UP UP UP

Alguém???

Up

tente:

public List&lt;Tarefa&gt; lista() { ... Calendar data = Calendar.getInstance(); // data.setTime(rs.getDate("Tarefa")); // você não tem a coluna tarefa na tabela data.setTime(rs.getDate("dataFinalizacao")); tarefa.setDataFinalizacao(data); ... }

num tem data…

não entendi. o valor é nulo (você não inseriu a data no registro)? a tabela não tem um campo de data?

Off-poste;
Eu tb estou estudando pela apostila da caelum…
Tb estou na parte de struts 2 mais estou com problema na ativida 11.6…
Eu fiz um topico de poder olhar agradeço…

vlw…

Amigos, esse tópico me ajudou bastante a resolver o problema que tive com o FJ-21, foi exatamente o que aconteceu com o nosso amigo João .
Sendo que eu reparei uma coisa estranha.

Quando nosso amigo sérgio sugeriu que inseríssemos a linha:

Class.forName("com.mysql.jdbc.Driver"); no nosso ConnectionFactory o erro mudava. E realmente consegui descobrir o erro que tinha em meu código assim como o joão conseguiu… No meu caso eu havia removido uma coluna de minha tabela e esqueci de trocar no stmt. portanto eu fazia uma referencia inexistente e tomava um nullpointer.

Então foi ae que eu reparei algo diferente. Na subida do servidor ele lança uma excessão de “InstanceAlreadyExistsException”. ou seja, me informa que eu ja possuo a instância do driver não havendo a necessidade de eu forçar essa instância.

Resumindo, quando eu forcei a instância do driver conforme sugerido pelo Sergio, o struts me mostrou o real erro que eu tinha, quando n fiz isso ele me deu um erro completamente diferente do meu problema, me dando um drivernotfound ao invés de um nullpointer.

Será que isso vai ocorrer em todos os problemas semelhantes que eu tiver referente a banco no Strusts2 ? Se for isso é uma coisa bem falha do struts.

Obs: meu servidor de aplicação é o Jboss e não apache tomcat como o do joão.

Absss rapaziada.