Boa tarde !!!
Estou tentando fazer um exercício de Ajax da apostila fj21 mas, não estou conseguindo alterar o conteúdo via Ajax.Teria que mudar o conteúdo de Finaliza Agora para Finalizado na Lista.
Se alguém puder me dar um força.
Fico grato.
No Spring-Context.xml coloquei a seguinte anotação
<mvc:default-servlet-handler/>
Minha Lista
<%@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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="resources/js/jquery.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
function finalizaAgora(id) {
$.post("finalizaTarefa", {'id' : id}, function() {
$("#tarefa_"+id).html("Finalizado");
});
}
</script>
<br />
<br />
<a href="novaTarefa">Criar nova tarefa</a>
<br />
<br />
<table border="1">
<tr>
<th>Id</th>
<th>Descrição</th>
<th>Finalizado ?</th>
<th>Data de Finalização</th>
<th>Remover</th>
<th>Alterar</th>
</tr>
<c:forEach items="${tarefas}" var="tarefa">
<tr id="tarefa_${tarefa.id}">
<td>${tarefa.id}</td>
<td>${tarefa.descricao}</td>
<c:if test="${tarefa.finalizado eq true}">
<td>Finalizado</td>
</c:if>
<c:if test="${tarefa.finalizado eq false}">
<td id="tarefa_$(tarefa.id)">
<a href="#" onClick="finalizaAgora(${tarefa.id})">
Finalizar Agora !
</a>
</td>
</c:if>
<td><fmt:formatDate value="${tarefa.dataFinalizacao.time}"
pattern="dd/MM/yyyy" /></td>
<td><a href="removeTarefa?id=${tarefa.id}">Remover</a></td>
<td><a href="mostraTarefa?id=${tarefa.id}">Alterar</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
Classe Controller
@Controller
public class TarefasController {
private final JdbcTarefaDao dao;
@Autowired
public TarefasController(JdbcTarefaDao dao) {
this.dao = dao;
}
@RequestMapping("novaTarefa")
public String form() {
return "tarefa/formulario";
}
@RequestMapping("finalizaTarefa")
public void finaliza(Long id,HttpServletResponse response){
dao.finaliza(id);
//model.addAttribute("tarefa",dao.buscaPorId(id));
//return "tarfa/finaliza";
response.setStatus(200);
}
}
Classe DAO
@Repository
public class JdbcTarefaDao {
private final Connection connection;
@Autowired
public JdbcTarefaDao(DataSource dataSource) {
try {
this.connection =dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void finaliza(Long id) {
if (id == null) {
throw new IllegalStateException("Id da tarefa não deve ser nula.");
}
String sql = "update tarefas set finalizado = ?, dataFinalizacao = ? where id = ?";
PreparedStatement stmt;
try {
stmt = connection.prepareStatement(sql);
stmt.setBoolean(1, true);
stmt.setDate(2, new Date(Calendar.getInstance().getTimeInMillis()));
stmt.setLong(3, id);
stmt.execute();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}