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…
[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.
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ção</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p>
<strong>Quantidade de páginas:</strong><%= qtdPages %><br>
<strong>Total por pá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ó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…