Paginação

A minha duvida e como eu faço para mostra um resultado
de um vetor de produtos em uma paginação de 25 resultados
estou trabalhando da seguinte forma:

<%@ page contentType=“text/html”%>
<%@ page import=“java.sql.ResultSet”%>
<%@ page import=“Bean.Produtos”%>
<%@ page import= “java.util.Vector”%>
<HTML>

<HEAD>

<h3>Produtos</h3>

<TABLE border=“1” cellspacing=“1” cellpadding=“0.2”>
<tr>
<td align=“center” >
<font face=“Verdana” size=“1”>Codigo</font>
</td>
<td align=“center” >
<font face=“Verdana” align=“center” >Descrição</font>
</td>
<td align=“center” >
<font face=“Verdana” size=“1”>Preço</font>
</td>
<td align=“center” >
<font face=“Verdana” size=“1”>Estoque</font>
</td>
<td align=“center”>
<font face=“Verdana” size=“1”>Qtd</font>
</td>

</tr>

<%! Vector vprodutos = null; %>
<%! int codigo =0 ; %>
<%! int maxRows = 20 ; %>

<%

vprodutos = (Vector) session.getAttribute(“ListaProdutos”);
if ( vprodutos == null) System.out.println(“resultSet esta nulo.”);

for (int i = 0; i < vprodutos.size() ; i++)
{

%>

<tr>
<td> <%=((Produtos)vprodutos.get(i)).getCodigo()%></td>
<td> <%=((Produtos)vprodutos.get(i)).getDescricao()%></td>
<td> <%=((Produtos)vprodutos.get(i)).getValorVenda()%></td>
<td> <%=((Produtos)vprodutos.get(i)).getQuantidade()%></td>
<td> <input type=“text” name=“quantidade” maxlength=“8” size=“8” </td>
</tr>
<%

    }//fim for    
session.setAttribute("ListaProdutos", vprodutos);

%>

</table>

</HTML>

Kra, se vc já está carregando todos os produtos no vetor. Passa o que vc quer fazer via query string.

suponhamos que vc queira uma paginação de 25 em 25.
Pelo tamanho do vetor vc sabe quantas páginas vc vc tem, certo?

Exemplo:
http://localhost:8080/myApp/produtos.jsp?max=25&page=2

int max = request.getParameter("max"); int page = request.getParameter("page"); int totalItens = vprodutos.size(); // aki vc pega todos os parametros necessários

Vejamos se o seu cursor tem 133 item, então vc tem

int pages = (int) totalItens/max; if ((totalItens%max) > 0) pages++; // pages = 6

Agora que vc já tem a quantidade de paginas, basta vc inicar o seu for na página que o kra selecionou.
Veja que no exemplo o kra tá na página 2, exibindo 25 itens por página:

[code]for (int i = (page * max);i < totalItens; i++) {

%>

<%=((Produtos)vprodutos.get(i)).getCodigo()%> <%=((Produtos)vprodutos.get(i)).getDescricao()%> <%=((Produtos)vprodutos.get(i)).getValorVenda()%> <%=((Produtos)vprodutos.get(i)).getQuantidade()%> <input type="text" name="quantidade" maxlength="8" size="8" <%

}//fim for
%>
[/code]

Bem, eu não testei, eu faria mais ou menos assim…

falow… :wink:

[quote=“paulo.f.nhaia (private msg)”]Brother sua dica parece ser muito boa mais não entendi como funciona,
como chama a proxima pagina vc pode detalhar mais sobre seu exemplo.
Grato pela ajuda…
Valeu…[/quote]

veja que para dar certo, vc teria que iniciar pela página 0, a paginação é simples, veja:

Quantas paginas eu tenho:
Total de itens / Itens por página.
Se o resto desta divisão não é zero, vc soma mais uma página.
Ex:
Total de itens: 133
Itens por página: 25

133/25 = 5.32
logo vc terá 6 páginas.

Agora veja como vc faria o link para cada página:
Página 1: http://localhost:8080/myApp/produtos.jsp?max=25&page=0
Página 2: http://localhost:8080/myApp/produtos.jsp?max=25&page=1
Página 3: http://localhost:8080/myApp/produtos.jsp?max=25&page=2
Página 4: http://localhost:8080/myApp/produtos.jsp?max=25&page=3
Página 5: http://localhost:8080/myApp/produtos.jsp?max=25&page=4
Página 6: http://localhost:8080/myApp/produtos.jsp?max=25&page=5

Se voc tiver 30 itens por página:
Total de itens: 133
Itens por página: 30

133/30 = 4.43
neste caso vc terá 5 págnas
Página 1: http://localhost:8080/myApp/produtos.jsp?max=30&page=0
Página 2: http://localhost:8080/myApp/produtos.jsp?max=30&page=1
Página 3: http://localhost:8080/myApp/produtos.jsp?max=30&page=2
Página 4: http://localhost:8080/myApp/produtos.jsp?max=30&page=3
Página 5: http://localhost:8080/myApp/produtos.jsp?max=30&page=4

Sacou!
Um abraço. :wink:

C:projetoWoodworkorgapachejspselecao_produtos_jsp.java:14: illegal forward reference
int max = Integer.parseInt(request.getParameter(“max”));
^
C:projetoWoodworkorgapachejspselecao_produtos_jsp.java:15: illegal forward reference
int page = Integer.parseInt(request.getParameter(“page”));
^
C:projetoWoodworkorgapachejspselecao_produtos_jsp.java:115: operator * cannot be applied to java.lang.Object,int
for (int i = ( page*max ) ;i < totalItens; i++)
^
3 errors

Testei e funcionou…
Dá uma olhada ai:

<%@ page contentType="text/html; charset=iso-8859-1" language="java" %>
<%@ page import= "java.util.Vector" %> 
<%
	Vector v = new Vector();
	for (int i=0;i < 133; i++) {
		String[] s = {String.valueOf(i+1),"Maria da Silva","999.999.999-99"};
		v.add(s);
	}

	// recupera o número de máximo por página
	int max =  Integer.parseInt(request.getParameter("max"));
	
	// recupera o número da página atual
	int nrPage = Integer.parseInt(request.getParameter("pg"));
	
	int qtdPages;
	
	// verifica se o total de registro pelo maximo por página é um número exato
	if ((v.size()%max) == 0) 
		qtdPages = (int) v.size()/max;
	else
		qtdPages = ((int) v.size()/max) + 1; // se não soma 1 (um) no total de páginas
		
	// pega qual será o inidice inicial.
	int ini = nrPage * max;
	// pega qual será o inidice final.
	int limit = ini + max;
	
	//verifica se o inidice final é maior que a quantidade de itens.
	if (limit > v.size()) limit = v.size();
%>
<html>
	<head>
		<title>Teste de Pagina&ccedil;&atilde;o</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	</head>
	<body>
		<p>
		<strong>Quantidade de p&aacute;ginas:</strong><%= qtdPages %><br>
		<strong>Total por p&aacute;gina:</strong><%= max %>
		<hr>
		<strong>Registro inicial:</strong><%= ini+1 %><br>
		<strong>Registro final:</strong><%= limit %>
		</p>
		<p> Ir para:
		<table cellpadding="0" cellspacing="0" width="300">
			<tr>
<%
	for (int i = 0; i < qtdPages; i++) {
%>
				<td width="5"><a href="paginacao.jsp?max=<%=max%>&pg=<%=i+1%>"><%= i+1 %></a></td>
<%
	}
%>
			</tr>
		</table>
		</p>
		<p>
		<table cellpadding="0" cellspacing="0" border="1" width="300">
			<tr>
				<strong>
				<td>C&oacute;digo</td>
				<td>Nome</td>
				<td>CPF</td>
				</strong>
			</tr>
<%
	for (int i = ini; i < limit; i++) {
		// Recupera o registro do vetor...
		String[] s = (String[])v.get(i);
		
%>
			<tr>
				<% // atribui os valores na celula...  %>
				<td><%= s[0] %></td>
				<td><%= s[1] %></td>
				<td><%= s[2] %></td>
			</tr>
<%
	}
%>
		</table>
		</p>    
	</body>
</html>

Só mais uma coisa… Deixa eu falar uma coisa que o CV iria falar para vc…

Não use Vector use List, ArrayList, etc…
Se não me engano, tem algo a ver com ser sincronizado… Me corrijam se eu estiver errado…
Alô CV, vc tá por ai?

Um abraço kra… :wink: