Dúvida de Paginação com pager-taglib

9 respostas
D

Olá pessoal,

Queria saber se alguém poderia me ajudar com este problema. Estou desenvolvendo uma página de consulta e o resultado eu faço a paginação.
Só que quando eu vou para a próxima página da consulta ele perde as informações. Neste caso eu estou ultilizando a chamada pela struts

Aqui está o código:

primeiro eu chamo esta classe action(struts) ConsultaAction:

public class ConsulPesquisadorAction extends DispatchAction {

String query="";
PreparedStatement st=null;

public ActionForward pesquisar(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {
ConsulPesquisadorActionForm f = (ConsulPesquisadorActionForm) form;
  Conexao con = new Conexao();
  Connection c = con.abrirConexao();      
  BDPesquisador p = new BDPesquisador(); 
 
  List lista = (List) p.getBuscaConsulta(c,f.getTxtnome().trim(),f.getTxtrg().trim());
  
  if(lista.size() > 0){
      request.setAttribute("pesquisadores", lista);
      return mapping.findForward("encontrado");
  }else {
      return mapping.findForward("erro_psq");
  }

}
}

Depois esta class DBPesquisador :

public List getBuscaConsulta(Connection c,String nome_pesquisador,String rg){
List lista = new ArrayList();

try{
         
         if(nome_pesquisador.equals("") || rg.equals("")){
             query="Select * From pesquisador";
         }else if(nome_pesquisador!="" && rg!=""){
             query="Select * From pesquisador Where nome_pesquisador like '%" + nome_pesquisador + "%'" +
                     "and rg like '%" + rg + "%'";
         }
         
         Statement st =  c.createStatement();
         ResultSet rs = st.executeQuery(query);
         
         while(rs.next()){
             Pesquisador p = new Pesquisador();                
             
             p.setIdpesquisador(rs.getLong(1));
             p.setNome(rs.getString(2));
             p.setEmail(rs.getString(3));
             p.setInstituicao(rs.getString(4));
             p.setRg(rs.getString(5));
             p.setEndereco(rs.getString(6));
             p.setBairro(rs.getString(7));
             p.setCidade(rs.getString(8));
             p.setUf(rs.getString(9));
             p.setCep(rs.getString(10));
             p.setTelefone(rs.getString(11));
             p.setArea_unid(rs.getString(12));
             p.setEndereco_inst(rs.getString(13));
             lista.add(p);

         }
         
     }catch(Exception e) {
        e.printStackTrace();
    }
  return lista;
 }

resultado_pesquisa.jsp :
<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>

<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ taglib uri=“http://jsptags.com/tags/navigation/pager” prefix=“pg” %>
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

<%@ page import=“classes.Pesquisador” %>
<%@ page import=“java.util.*” %>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”>

<html>

<head>

<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>

<title>Projeto Pesquisador</title>

<!-- insere arquivos css e javascript -->

<link rel=“stylesheet” type=“text/css” href=“configuracao.css” >

<script language=“JavaScript1.2” src="./funcoes.js"></script>

</head>

<body>

<!-- insere arquivo referente ao cabeçalho da página -->

<jsp:include page=“cabecalho.jsp” />

<pg:pager id=“p” maxPageItems=“1” maxIndexPages=“10”  export=“offset,currentPageNumber=pageNumber” scope=“request” >

<table width=“100%” border=“1”  class=‘properties’>

<tr>

<th width=“28%” height=“18”><strong>Id</strong></th>

<th width=“12%”><strong>Nome</strong></th>

<th width=“12%”><strong>E-Mail</strong></th>

</tr>
&lt;c:forEach items="${requestScope.pesquisadores}" var="pesquisadores"&gt;
                    &lt;pg:item&gt;
                         &lt;tr&gt;   
                           &lt;td &gt;&lt;c:out  value="${pesquisadores.idpesquisador}"/&gt;&lt;/td&gt;  
                           &lt;td &gt;&lt;c:out  value="${pesquisadores.nome}"/&gt;&lt;/td&gt;  
                           &lt;td &gt;&lt;c:out  value="${pesquisadores.email}"/&gt;&lt;/td&gt;  
                         &lt;/tr&gt;  
                    &lt;/pg:item&gt;
                &lt;/c:forEach&gt;
            &lt;/table&gt;
            &lt;pg:index&gt;
                 &lt;pg:first&gt;<a >[Primeira]</a>&lt;/pg:first&gt;
                 &lt;pg:prev&gt;<a >[Anterior]</a>&lt;/pg:prev&gt; &lt;pg:pages&gt;<a ></a>&lt;/pg:pages&gt;
                 &lt;pg:pages&gt;<a >&lt;c:out value="${pageNumber}"/&gt;</a>&lt;/pg:pages&gt;   
                 &lt;pg:next&gt;<a >[Proxima(&lt;c:out value="${pageNumber}"/&gt;)]</a>&lt;/pg:next&gt;
                 &lt;pg:last&gt;<a >[Ultima]</a>&lt;/pg:last&gt; <a >&lt;strong&gt;Fechar&lt;/strong&gt;</a>
             &lt;/pg:index&gt;  
        &lt;/pg:pager&gt;
&lt;/body&gt;

</html>

Eu faço tudo isto na primeira vez e quando vou para próxima página ele some toda informação
Grato;
Diogo Alló

9 Respostas

sergio.souza

Eu tive esse problema.

Resolvi fazendo o seguinte:
ResultAction -> resultado_pesquisa.jsp
ConsultaAction -> ResultAction.do

Traduzindo:
Quando você chamar a “ConsultaAction” ela redireciona para uma outra action, que chamei de ResultAction, e o ResultAction redicionar para a página resultado_pesquisa.jsp.

E o seu <pg:pager id="p" maxPageItems="1" maxIndexPages="10" export="offset,currentPageNumber=pageNumber" scope="request"> você adicionar o url=“ResultAction.do”

Ficando:

<pg:pager id="p" maxPageItems="1" maxIndexPages="10" export="offset,currentPageNumber=pageNumber" scope="request" url="ResultAction.do">

Espero que der para entender.

D

Olá Seŕgio …

Eu já passo por um action, e não entendi direito.

Tenho que declarar isto ?
ResultAction -> resultado_pesquisa.jsp
ConsultaAction -> ResultAction.do

Grato;
Diogo Alló

sergio.souza

diogoallo:
Olá Seŕgio …

Eu já passo por um action, e não entendi direito.

Tenho que declarar isto ?
ResultAction -> resultado_pesquisa.jsp
ConsultaAction -> ResultAction.do

Grato;
Diogo Alló

Exemplo:

<action path="/membro/lista" forward="/jsp/membro_listar.jsp"/> <action path="/membro/listar" type="sistema.membro.MembroListarAction"> <forward name="SUCCESS" path="/membro/lista.do" redirect="false"/> <forward name="ERROR" path="/error.do" redirect="false"/> </action><pg:pager url="lista.do" maxPageItems="10"> <pg:item> ... </pg:item> <pg:prev>...</pg:prev> <pg:pages>...</pg:pages <pg:next>...</pg:next> </pg:pager>
Observe que o cabeçado do pg:pager seta a url=“lista.do”.

Daí chamo a action: /membro/listar.do

Obs.: Se a sua página possuir um form, esse deve ter na action “/membro/listar.do”. Exemplo:

<form id="form_membro" name="form_membro" method="post" action="<html:rewrite action='membro/listar'/>">
sergio.souza

O ideal é que sua classe “pesquisar” coloque o resultado na sessão:

request.getSession().setAttribute(session, object)

Assim, quando redicionar, o conteúdo continuar presente na sessão.

D

Bom dia Sérgio

O meu Struts-config.xml está assim ;

<forward name="encontrado" path="/resultado_pesquisa.jsp"/>
        <forward name="erro_psq" path="/resultado_pesquisa.jsp"  />

onde no consulta.jsp eu chamo o path="/procura" que está no ConsulPesquisadorActionForm, passando por parametro a chamando este metodo:

public ActionForward pesquisar(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {
ConsulPesquisadorActionForm f = (ConsulPesquisadorActionForm) form;
  Conexao con = new Conexao();
  Connection c = con.abrirConexao();      
  BDPesquisador p = new BDPesquisador(); 
 
  List lista = (List) p.getBuscaConsulta(c,f.getTxtnome().trim(),f.getTxtrg().trim());
  
  if(lista.size() > 0){
      request.getSession().setAttribute("pesuisadores", lista);
      return mapping.findForward("encontrado");
  }else {
      return mapping.findForward("erro_psq");
  }

}

e que vai chamar o metodo getBuscaConsulta que está na classe : BDPesquisadores.java

public List getBuscaConsulta(Connection c,String nome_pesquisador,String rg){
List lista = new ArrayList();

try{
         
         if(nome_pesquisador.equals("") || rg.equals("")){
             query="Select * From pesquisador";
         }else if(nome_pesquisador!="" && rg!=""){
             query="Select * From pesquisador Where nome_pesquisador like '%" + nome_pesquisador + "%'" +
                     "and rg like '%" + rg + "%'";
         }
         
         Statement st =  c.createStatement();
         ResultSet rs = st.executeQuery(query);
         
         while(rs.next()){
             Pesquisador p = new Pesquisador();                
             
             p.setIdpesquisador(rs.getLong(1));
             p.setNome(rs.getString(2));
             p.setEmail(rs.getString(3));
             p.setInstituicao(rs.getString(4));
             p.setRg(rs.getString(5));
             p.setEndereco(rs.getString(6));
             p.setBairro(rs.getString(7));
             p.setCidade(rs.getString(8));
             p.setUf(rs.getString(9));
             p.setCep(rs.getString(10));
             p.setTelefone(rs.getString(11));
             p.setArea_unid(rs.getString(12));
             p.setEndereco_inst(rs.getString(13));
             lista.add(p);

         }
         
     }catch(Exception e) {
        e.printStackTrace();
    }
  return lista;
 }

E no resulta_pesquisa.jsp estou colocando assim :

<%@page contentType="text/html"%>

<%@page pageEncoding=“UTF-8”%>
<%–
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library… action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
–%>
<%–
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
–%>
<%@ taglib uri=“http://jsptags.com/tags/navigation/pager” prefix=“pg” %>
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

<%@ page import=“classes.Pesquisador” %>
<%@ page import=“java.util.*” %>

Projeto Pesquisador
<c:forEach items="${requestScope.pesquisadores}" var="pesquisadores">
                    <pg:item>
                         <tr>   
                           <td ><c:out  value="${pesquisadores.idpesquisador}"/></td>  
                           <td ><c:out  value="${pesquisadores.nome}"/></td>  
                           <td ><c:out  value="${pesquisadores.email}"/></td>  
                         </tr>  
                    </pg:item>
                </c:forEach>
            </table>
            <pg:index>
                 <pg:first><a href='<c:out value="${pageUrl}" />'>[Primeira]</a></pg:first>
                 <pg:prev><a href='<c:out value="${pageUrl}" />'>[Anterior]</a></pg:prev> <pg:pages><a href='<c:out value="${pageNumber}" />'></a></pg:pages>
                 <pg:pages><a href='<c:out value="${pageUrl}" />'><c:out value="${pageNumber}"/></a></pg:pages>   
                 <pg:next><a href='<c:out value="${pageUrl}" />'>[Proxima(<c:out value="${pageNumber}"/>)]</a></pg:next>
                 <pg:last><a href='<c:out value="${pageUrl}" />'>[Ultima]</a></pg:last> <a href="javascript:window.close();"><strong>Fechar</strong></a>
             </pg:index>  
        </pg:pager>
</body>

Minha dúvida é a onde eu acrescento as alterações que vc me falou pois fiquei muito confuso e me desculpe pois estou iniciando em java.

Grato;
Diogo Alló

Id Nome E-Mail
sergio.souza

Primeira coisa… altere para:

<action path="/result_consulta" forward="/resultado_pesquisa.jsp"/> <action path="/procura" input="/consulta.jsp" name="ConsulPesquisadorActionForm" scope="session" type="action.ConsulPesquisadorAction" parameter="pesquisar"> <forward name="encontrado" path="/result_consulta.do"/> <forward name="erro_psq" path="/result_consulta.do" /> </action>

<pg:pager id=“p” url="" maxPageItems=“1” maxIndexPages=“10”
export=“offset,currentPageNumber=pageNumber” scope=“page” >

Segunda coisa… altere para:

<pg:pager id="p" url="result_consulta.do" maxPageItems="1" maxIndexPages="10" export="offset,currentPageNumber=pageNumber" scope="page" >

Terceira coisa… a identificação da sessão:

request.getSession().setAttribute("pesquisadores", lista);
D

Sérgio este comando “request.getSession().setAttribute(“pesquisadores”, lista)”; eu coloco ]
no ConsulPesquisadorAction ?

public ActionForward pesquisar(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException {
ConsulPesquisadorActionForm f = (ConsulPesquisadorActionForm) form;
  Conexao con = new Conexao();
  Connection c = con.abrirConexao();      
  BDPesquisador p = new BDPesquisador(); 
 
  List lista = (List) p.getBuscaConsulta(c,f.getTxtnome().trim(),f.getTxtrg().trim());
  
  if(lista.size() > 0){
      request.getSession().setAttribute("pesquisadores", lista);
      return mapping.findForward("encontrado");
  }else {
      return mapping.findForward("erro_psq");
  }

}

sergio.souza

Cara,

Dê uma lida melhor nos fundamentos do Struts.

Não adianta eu te dizer como faz, se você não souber o que está sendo feito.

D

Valeu Sérgio… Consegui resolver.
Valeu mesmo…

Abraços;
Diogo Alló

Criado 13 de dezembro de 2007
Ultima resposta 14 de dez. de 2007
Respostas 9
Participantes 2