Olá, pessoal!
Estou desenvolvendo um sistema web de cadastro de livros, porém, estou encontrando dificuldades na hora de editar um livro e carregar suas informações no formulário.
Consegui implementar corretamente a função de Cadastrar, Listar e Excluir. Mas para Alterar os dados não estou tendo sucesso.
Se alguém puder dar uma ajuda, seguem abaixo as classes:
LivroController.java
import com.br.livros.modelo.Livro;
import java.sql.SQLException;
import java.util.ArrayList;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LivroController {
LivroCRUD livroCRUD = new LivroCRUD();
//Esta ação abre o formulário de cadastro (cadastro.jsp) e,
//após o usuário clicar no botão "Salvar", os dados são gravados no banco de dados.
//Em seguida, a página cadastro-salvar.jsp é chamada para mostrar que os dados foram salvos com sucesso.
@RequestMapping ("/cadastro")
public String cadastro() {
return "cadastro";
}
//Esta ação abre a página cadastro-salvar.jsp e serve para mostrar que
//os dados foram salvos com sucesso.
//Além disso, nessa página é possível ir para a página inicial (index.jsp) ou
//para a lista de livros (lista.jsp).
@RequestMapping ("/cadastro-salvar")
public String salvar (@RequestParam ("titulo") String titulo,
@RequestParam ("ano") int ano,
@RequestParam ("estado") String estado,
@RequestParam ("disponivel") String disponivel,
@RequestParam ("status")String status) {
Livro novoLivro = new Livro();
novoLivro.setTitulo(titulo);
novoLivro.setAnolancamento(ano);
novoLivro.setEstadoconservacao(estado);
novoLivro.setDisponivel(disponivel);
novoLivro.setStatus(status);
livroCRUD.cadastrar(novoLivro);
return "cadastro-salvar";
}
//Link excluir livro
@RequestMapping("removerLivro")
public String excluir(Livro livro) {
livroCRUD.excluir(livro);
return "redirect:lista";
}
//Encaminha para a tela de edição de livro
@RequestMapping("mostrarLivro")
public String mostrar(int id, Model model) throws SQLException {
model.addAttribute("listaLivros", livroCRUD.buscarLivroPorId(id));
return "mostrarLivro";
}
//Realiza a alteração no livro (update no banco de dados)
@RequestMapping("alterarLivro")
public String alterar(Livro livro) {
livroCRUD.alterar(livro);
return "redirect:lista";
}
//Esta ação abre a página lista.jsp e exibe todos os registros do banco de dados.
//Além disso, é possível retornar para a página inicial (index.jsp).
@RequestMapping ("/lista")
public String listar(Model model) {
ArrayList<Livro> livrosCadastrados = livroCRUD.listaTodos();
model.addAttribute("listaLivros", livrosCadastrados);
return "listar";
}
//Esta ação abre a página index.jsp.
//A partir desta página é possível ir para o formulário de cadastro (cadastro.jsp) ou para
//a lista de livros (livros.jsp).
@RequestMapping ("/index")
public String index () {
return "index";
}
}
LivroCRUD.java
import java.awt.HeadlessException;
import com.br.livros.modelo.Livro;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
public class LivroCRUD {
ConexaoBD conexaobd = new ConexaoBD();
Livro livros = new Livro();
//Método que insere os dados digitados no formulário no Banco de dados.
public void cadastrar (Livro livro) {
String sql = "insert into livros (titulo, anolancamento, estadoconservacao, disponivel, status) values (?, ?, ?, ?, ?)";
try {
PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);
ps.setString(1, livro.getTitulo());
ps.setInt(2, livro.getAnolancamento());
ps.setString(3, livro.getEstadoconservacao());
ps.setString(4, livro.getDisponivel());
ps.setString(5, livro.getStatus());
ps.execute();
} catch (HeadlessException | SQLException ex) {
}
}
//Método que insere os dados digitados no formulário no Banco de dados.
public void alterar (Livro livro) {
String sql = "update livros set titulo = ?, anolancamento = ?, estadoconservacao = ?, disponivel = ?, status = ? where id = ?";
try {
PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);
ps.setString(1, livro.getTitulo());
ps.setInt(2, livro.getAnolancamento());
ps.setString(3, livro.getEstadoconservacao());
ps.setString(4, livro.getDisponivel());
ps.setString(5, livro.getStatus());
ps.setInt(6, livro.getId());
ps.execute();
} catch (HeadlessException | SQLException ex) {
}
}
//Método que exclui o livro do Banco de dados.
public void excluir(Livro livro) {
String sql = "update livros set status = 'I' where id = ?";
try {
PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);
ps.setInt(1, livro.getId());
ps.execute();
} catch (HeadlessException | SQLException ex) {
}
}
//Método que lista os registros do banco de dados.
public ArrayList<Livro> listaTodos() {
String sql = "select * from livros where status = 'A'";
ArrayList<Livro> dados = new ArrayList<>();
conexaobd.abrirConexao();
conexaobd.executaSql(sql);
try {
conexaobd.rs.first();
do {
//Prenchendo as linhas da tabela.
Livro lv = new Livro();
lv.setId(conexaobd.rs.getInt("id"));
lv.setTitulo(conexaobd.rs.getString("titulo"));
lv.setAnolancamento(conexaobd.rs.getInt("anolancamento"));
lv.setEstadoconservacao(conexaobd.rs.getString("estadoconservacao"));
lv.setDisponivel(conexaobd.rs.getString("disponivel"));
lv.setStatus(conexaobd.rs.getString("status"));
dados.add(lv);
} while (conexaobd.rs.next());
} catch (SQLException ex) {
}
return dados;
}
public Livro buscarLivroPorId(int id) throws SQLException{
String sql = "select * from livros where id = ?";
Livro livro = new Livro();
try {
PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);
ps.setInt(1, livro.getId());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
livro.setId(rs.getInt("id"));
livro.setTitulo(rs.getString("titulo"));
livro.setAnolancamento(rs.getInt("anolancamento"));
livro.setEstadoconservacao(rs.getString("estadoconservacao"));
livro.setDisponivel(rs.getString("disponivel"));
livro.setStatus(rs.getString("status"));
}
} catch (HeadlessException | SQLException ex) {
}
return livro;
}
private static class PrepareStatement {
public PrepareStatement() {
}
private ResultSet executeQuery() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
private void close() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
}
Listar.jsp
<%--
Document : livros
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livros Web - Lista de Livros</title>
</head>
<body>
<font face="Calibri">
<h1 align="center">Lista de Livros</h1>
<c:if test="${listaLivros.size() == 0}">
<div align="center">Não existem registros a serem exibidos.</div>
</c:if>
<c:if test="${listaLivros.size() > 0}">
<table border="1" align="center">
<th bgcolor="B0 C4 DE">Título</th>
<th bgcolor="B0 C4 DE">Ano do Lançamento</th>
<th bgcolor="B0 C4 DE">Estado de Conservação</th>
<th bgcolor="B0 C4 DE">Disponível</th>
<th bgcolor="B0 C4 DE" colspan="2">Ação</th>
<c:forEach items="${listaLivros}" var="livro">
<tr align="center" bgcolor="B0 E0 E6">
<td>${livro.titulo}</td>
<td>${livro.anolancamento}</td>
<td>${livro.estadoconservacao}</td>
<td>${livro.disponivel}</td>
<td><a href="mostrarLivro?id=${livro.id}&titulo=${livro.titulo}&anolancamento=${livro.anolancamento}&estadoconservacao=${livro.estadoconservacao}&disponivel=${livro.disponivel}&status=${livro.status}">Alterar</a></td>
<td><a href="removerLivro?id=${livro.id}">Remover</a></td>
</tr>
</c:forEach>
</c:if>
</table> <br> <br>
<div align="center">
<a href="index">Página Inicial</a>
</div>
</font>
</body>
</html>
MostrarLivro.jsp (PROBLEMA: ESSA PÁGINA NÃO CARREGA AS INFORMAÇÕES DOS LIVROS)
<%--
Document : mostrarLivro
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livros Web - Cadastro de Livros</title>
</head>
<body>
<font face="Calibri">
<h1 align="center">Alterar Livros</h1>
<form action="alterarLivro" method="post">
<input type="hidden" name="id" value="${listaLivros.id}" />
<table border="1" align="center">
<tr bgcolor="B0 E0 E6">
<td>
<br>
<b>Título:</b> <br>
<input type="text" id="titulo" name="titulo" size="50" maxlength="100" value="${listaLivros.titulo}"> <br> <br>
<b>Ano de Lançamento:</b> <br>
<input id="anolancamento" type="number" name="ano" min="1700" max="2050" size="50" maxlength="100" value="${listaLivros.anolancamento}"> <br> <br>
<b>Estado de Conservação:</b> <br>
<select id="estadoconservacao" name="estado" value="${listaLivros.estadoconservacao}">
<option value="Danificado">Danificado</option>
<option value="Regular">Regular</option>
<option value="Bom">Bom</option>
<option value="Excelente">Excelente</option>
</select> <br> <br>
<b>Disponível?</b>
<input id="disponivel" type="radio" name="disponivel" value="${listaLivros.disponivel}"> Sim
<input id="disponivel" type="radio" name="disponivel" value="${listaLivros.disponivel}"> Não <br> <br>
<input id="status" type="hidden" name="status" value="A">
</td>
</tr>
</table> <br> <br>
<div align="center">
<button align="center">Salvar</button> <br> <br>
<a href="index">Página Inicial</a>
</div>
</form>
<a href="index" align="center" value="< Voltar"></a>
</font>
</body>
</html>
Se tiver faltando mais informações, me avisem.