Hoje desenvolvi um sistema para consulta de informações tecnológicas, implementando funcionalidades de busca condicional com filtros e paginação de dados do banco. Enfrentei desafios no design das itnerfaces CSS e na implementação da visualização de documentos, mas consegui superar essas dificuldades e concluir o projeto com sucesso.
package br.tech.system.web.controller;
import br.tech.system.model.PageResult;
import br.tech.system.model.TechInfo;
import br.tech.system.service.TechInfoService;
import br.tech.system.service.impl.TechInfoServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@WebServlet(name = "TechSearchController", value = "/buscar-tecnologia")
public class TechSearchController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 1. Obter parâmetros de paginação
String paginaAtual = request.getParameter("pagina");
String registrosPorPagina = request.getParameter("registros");
// Valores padrão caso não sejam informados
if (paginaAtual == null || paginaAtual.isEmpty()) {
paginaAtual = "1";
}
if (registrosPorPagina == null || registrosPorPagina.isEmpty()) {
registrosPorPagina = "10";
}
// Obter parâmetros de filtro
Map<string string=""> filtros = request.getParameterMap();
// 2. Chamar serviço para buscar dados
TechInfoService service = new TechInfoServiceImpl();
PageResult<techinfo> resultadoPaginado = service.buscarPorPagina(paginaAtual, registrosPorPagina, filtros);
// Armazenar resultado na requisição
request.setAttribute("resultado", resultadoPaginado);
request.setAttribute("filtrosAplicados", filtros);
// 3. Encaminhar para página de listagem
request.getRequestDispatcher("/lista-tecnologias.jsp").forward(request, response);
}
}
</techinfo></string>
package br.tech.system.dao.impl;
import br.tech.system.dao.TechInfoDAO;
import br.tech.system.model.TechInfo;
import br.tech.system.util.DataSourceConfig;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class TechInfoDAOImpl implements TechInfoDAO {
private JdbcTemplate template = new JdbcTemplate(DataSourceConfig.getDataSource());
@Override
public List<techinfo> buscarTodos() {
String sql = "SELECT * FROM tecnologia";
return template.query(sql, new BeanPropertyRowMapper<>(TechInfo.class));
}
@Override
public TechInfo buscarPorId(int id) {
String sql = "SELECT * FROM tecnologia WHERE id=?";
return template.queryForObject(sql, new BeanPropertyRowMapper<>(TechInfo.class), id);
}
@Override
public int contarTotalRegistros(Map<string string=""> filtros) {
String sql = "SELECT COUNT(*) FROM tecnologia WHERE 1=1 ";
StringBuilder sqlBuilder = new StringBuilder(sql);
List<object> parametros = new ArrayList<>();
// Processar filtros
Set<string> chaves = filtros.keySet();
for (String chave : chaves) {
if ("pagina".equals(chave) || "registros".equals(chave)) {
continue;
}
String valor = filtros.get(chave)[0];
if (valor != null && !valor.isEmpty()) {
sqlBuilder.append(" AND ").append(chave).append(" LIKE ?");
parametros.add("%" + valor + "%");
}
}
return template.queryForObject(sqlBuilder.toString(), Integer.class, parametros.toArray());
}
@Override
public List<techinfo> buscarPorPagina(int inicio, int quantidade, Map<string string=""> filtros) {
String sql = "SELECT * FROM tecnologia WHERE 1=1 ";
StringBuilder sqlBuilder = new StringBuilder(sql);
List<object> parametros = new ArrayList<>();
// Processar filtros
Set<string> chaves = filtros.keySet();
for (String chave : chaves) {
if ("pagina".equals(chave) || "registros".equals(chave)) {
continue;
}
String valor = filtros.get(chave)[0];
if (valor != null && !valor.isEmpty()) {
sqlBuilder.append(" AND ").append(chave).append(" LIKE ?");
parametros.add("%" + valor + "%");
}
}
// Adicionar cláusula de paginação
sqlBuilder.append(" LIMIT ?, ?");
parametros.add(inicio);
parametros.add(quantidade);
return template.query(sqlBuilder.toString(), new BeanPropertyRowMapper<>(TechInfo.class),
parametros.toArray());
}
}
</string></object></string></techinfo></string></object></string></techinfo>
package br.tech.system.web.controller;
import br.tech.system.model.TechInfo;
import br.tech.system.service.TechInfoService;
import br.tech.system.service.impl.TechInfoServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "TechDetailController", value = "/detalhe-tecnologia")
public class TechDetailController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. Obter ID do registro
String id = request.getParameter("id");
// 2. Chamar serviço para buscar detalhes
TechInfoService service = new TechInfoServiceImpl();
TechInfo detalhe = service.buscarPorId(id);
// 3. Armazenar detalhes na requisição
request.setAttribute("detalheTecnologia", detalhe);
// 4. Encaminhar para página de detalhes
request.getRequestDispatcher("/detalhe-tecnologia.jsp").forward(request, response);
}
}