Estou com um problema sério para listar com Struts 2 .
Ele gera um erro , falando que a minha action não existe.
Gerando o 404.
Segue os códigos :
TarefaDAO
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.Date;
import java.util.List;
import br.com.cfr.jdbc.ConnectionFactory;
import br.com.cfr.jdbc.modelo.Tarefa;
public class TarefaDAO {
Connection connection;
public TarefaDAO() throws ClassNotFoundException{
this.connection = new ConnectionFactory().getConnection();
}
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("dataFinalizacao"));
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);
}
}
public void altera(Tarefa tarefa){
String sql = "update tab_tar set descricao=?, finalizado=? where id=?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1,tarefa.getDescricao() );
stmt.setString(2, tarefa.getFinalizado());
stmt.setLong(3, tarefa.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Action
package br.com.cfr.action;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import br.com.cfr.jdbc.dao.TarefaDAO;
import br.com.cfr.jdbc.modelo.Tarefa;
public class ListaTarefasAction {
private List<Tarefa> tarefas;
@Action(value="lista" , results = {
@Result(name="ok" , location ="lista-tarefas.jsp")
})
public String execute() throws ClassNotFoundException {
tarefas = new TarefaDAO().lista();
return "ok";
}
public List<Tarefa> getTarefas() {
return tarefas;
}
}
}
e a JSP :
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<body>
<a href="formulario-tarefas">Criar nova tarefa</a>
<br /> <br />
<table>
<tr>
<th>Id</th>
<th>Descrição</th>
<th>Finalizado</th>
<th>Data de finalização</th>
</tr>
<c:forEach items="${tarefas}" var="tarefa" >
<tr>
<td>${tarefa.id}</td>
<td>${tarefa.descricao}</td>
<td>${tarefa.finalizado}</td>
<td><fmt:formatDate value="${tarefa.dataFinalizacao.time}" pattern="dd/MM/yyyy"/>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Se alguém souber , muito obrigado .