Sistema de Consulta de Informações Tecnológicas com Paginação

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);
    }
}

Tags: java servlet jsp jdbc paginação

Publicado em 5-31 08:36 por Thomas