Вы находитесь на странице: 1из 5

Paginao de resultados no JSP

Dimas Ferreira Vidal

Resumo O objetivo deste artigo demonstrar uma tcnica para implementar paginao de resultados de uma consulta a banco de dados, com um nmero grande de registros, dividindo o resultado em pginas passveis de navegao. Palavras chave: Jsp, Java, paginao de resultados, desenvolvimento web.

Paginao de resultados O exemplo abaixo descreve um dos mecanismos para se implementar paginao de resultados de uma consulta a banco de dados.

<!-- Exemplo de aplicao com acesso a banco de dados --> <% String valor = request.getParameter("p"); int pagina = 1; if (valor != null) { int vlr = Integer.parseInt(valor); pagina = vlr; } %> <%@ page import="java.sql.*" %> <!-- Diretiva page para importar classes java.sql --> <% String connectionURL = "jdbc:mysql://localhost:3306/exemplos"; String user = "root"; String password = ""; Connection conn = null; Statement stm = null; ResultSet countset = null; ResultSet recordset = null; %> <!-- Strings que sero utilizadas na conexo ao Mysql--> <% Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(connectionURL,user,password); stm = conn.createStatement(); countset = stm.executeQuery("select COUNT(*) as num from tb_user");

countset.next(); int num_rows = countset.getInt("num"); int num_pages = Math.round(num_rows /15) + 1; int inicio = (pagina * 15) - 15; recordset = stm.executeQuery("select * from tb_user limit " + inicio + ", 15"); %> <!-- Bloco de objetos java.sql --> <html> <head> <%@ include file="estilo.jsp" %> </head> <body> <div id ="dados"> <% out.println("<table cellpadding=\"4\">"); out.println("<tr>"); out.println("<td>Nome</td>"); out.println("<td>Email</td>"); out.println("</tr>"); while(recordset.next()){ out.println("<tr>"); out.println("<td>" + recordset.getString("nome") + "</td>"); out.println("<td>" + recordset.getString("email") + "</td>"); out.println("</tr>"); } out.println("</table>"); recordset.close(); countset.close(); out.println("<br>Pagina atual: "); out.println(pagina); out.println("<br>Numero de linhas por pagina: "); out.println(num_rows); out.println("<br>Total de paginas: "); out.println(num_pages); out.println("<br>"); out.println("<br>"); out.println("<br>"); for (int x = 1;x < num_pages + 1;x++){ out.print("<div style=\"float:left\">"); out.print("<a href=\"paginar.jsp?p=" + x + "\" style=\"border:1px solid #000; padding:1px 5px 1px 5px; margin:2px; display:block; backgroundcolor:#ccc\">"); out.print(x); out.print("</a>"); out.print("</div>"); } %>

Anlise de cdigo fonte:


<% String valor = request.getParameter("p"); int pagina = 1; if (valor != null) { int vlr = Integer.parseInt(valor); pagina = vlr; } %>

Primeiro devemos implementar um controle de navegao realizado pelo parmetro p, para controlar qual pgina o usurio deseja ser mostrada. 2

No nosso exemplo, foi implementada uma rotina condicional para verificar se algum parmetro p foi passado, if (valor != null) . Caso no haja nenhum valor, a primeira pgina ser Apresentada, caso contrrio ser apresentado a pgina definida em p. importante verificar que o parmetro passado pelo mtodo GET, no nosso caso, o parmetro p uma string, portanto, para manipular seu valor como um nmero inteiro, deveremos transform-la para este tipo, como na instruo int vlr = Integer.parseInt(valor);

<%@ page import="java.sql.*" %> <!-- Diretiva page para importar classes java.sql --> <% String connectionURL = "jdbc:mysql://localhost:3306/exemplos"; String user = "root"; String password = ""; Connection conn = null; Statement stm = null; ResultSet countset = null; ResultSet recordset = null; %> <!-- Strings que sero utilizadas na conexo ao Mysql--> <% Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(connectionURL,user,password); stm = conn.createStatement(); countset = stm.executeQuery("select COUNT(*) as num from tb_user"); countset.next(); int num_rows = countset.getInt("num"); int num_pages = Math.round(num_rows /15) + 1; int inicio = (pagina * 15) - 15; //recordset = null; recordset = stm.executeQuery("select * from tb_user limit " + inicio + ", 15"); %> <!-- Bloco de objetos java.sql -->

Neste bloco so realizados duas consulta SQL, uma para se definir a quantidade total de registros obtidos;
countset = stm.executeQuery("select COUNT(*) as num from tb_user"); countset.next();

Executamos um clculo dividindo o nmero de registros obtidos pelo nmero de registros que sero apresentados em cada pgina e definimos o registro inicial de cada pgina, em funo da pgina que ser apresentada e executamos a consulta de apresentao com o recurso de limitao de registro do banco de dados Mysql.
int num_rows = countset.getInt("num"); int num_pages = Math.round(num_rows /15) + 1; int inicio = (pagina * 15) - 15; recordset = stm.executeQuery("select * from tb_user limit " + inicio + ", 15");

O passo seguinte, ser apresentar o resultado construindo uma tabela dinmica com o resultado da segunda busca. 3

<html> <head> <%@ include file="estilo.jsp" %> </head> <body> <div id ="dados"> <% out.println("<table cellpadding=\"4\">"); out.println("<tr>"); out.println("<td>Nome</td>"); out.println("<td>Email</td>"); out.println("</tr>"); while(recordset.next()){ out.println("<tr>"); out.println("<td>" + recordset.getString("nome") + "</td>"); out.println("<td>" + recordset.getString("email") + "</td>"); out.println("</tr>"); } out.println("</table>"); recordset.close(); countset.close();

importante relembrar que as camadas de manipulao dos dados e os mecanismos de formatao e apresentao podem ficar separados, utilizando folha de estilo, como no exemplo: <%@ include file="estilo.jsp" %> Por fim, devemos construir o mecanismo de navegao, para que o usurio possa navegar sobre as pginas desejadas.
for (int x = 1;x < num_pages + 1;x++) { out.print("<div style=\"float:left\">"); out.print("<a href=\"paginar.jsp?p=" + x + "\" style=\"border:1px solid #000;padding:1px 5px 1px 5px;margin: 2px; display:block; backgroundcolor:#ccc\">"); out.print(x); out.print("</a>"); out.print("</div>"); }

Neste caso, utilizamos um looping para definir os componentes de navegao, atravs de links com os parmetros das pginas a serem apresentadas. Veja que neste caso, a formatao e apresentao de estilo foram implementadas dentro das tags de dados. O resultado ser:

Concluso:

importante ressaltarmos que o presente artigo no tem a pretenso de demonstrar a melhor maneira de implementar paginao de resultados de consulta a banco de dados. O principal objetivo demonstrar a flexibilidade e poder do JSP, bem como, demonstrar como integrar a lgica de negcio com a apresentao.

Referncias CADENHEAD, Roger. Lemay, Laura. Aprenda Java em 21 dias. Editora Campus, 2005. KURNIAWEAN. Budi. Java para Web com Sevlets, JSP e EJB. Editora Cincia Moderna, 2002. SINTES, Anthony, Aprenda Programao Orientado a Objetos em 21 dias, Makron Books, So Paulo, 2002. BRAUDE, Eric, Projeto de Software, Bookman, So Paulo, 2005. SHACHOR, Gal. Chace, Adam et al. Java Server Pages, bibliotecas de tags. Editora Cincia Moderna, 2002. DOWNLOAD JDK, http://java.sun.com/javase/downloads/index.jsp. DOWNLOAD TOMCAT, http://tomcat.apache.org/download-60.cgi.

Вам также может понравиться