Paginação rich:datascroller - Estou apanhando e nada de funcionar

25 respostas
W

PessoALL,

Estou querendo ativar os links para o usuário avançar e retroceder na paginação.

Até conseguir fazer a paginação, só que fica só na primeira página.

Meu código está assim:

<rich:panel rendered="#{consultaBean.consulta != null}"> <rich:dataTable id="lstConsulta" value="#{consultaBean.consulta}" styleClass="tabela_contorno" var="lstConsulta" border="1" rendered="#{consultaBean.consulta != null}" rows="11"> <t:column width="10"> <center> <f:facet name="header"> <b><h:outputText value="Telefone"/></b> </f:facet> <h:outputText value="#{lstConsulta.telefone}"/> </center> </t:column> <t:column width="160"> <center> <f:facet name="header"> <b><h:outputText value="Secretaria"/></b> </f:facet> </center> <h:outputText value="#{lstConsulta.secretaria}"/> </t:column> <t:column width="190"> <center> <f:facet name="header"> <b><h:outputText value="Departamento"/></b> </f:facet> </center> <h:outputText value="#{lstConsulta.departamentos}"/> </t:column> <t:column width="190"> <center> <f:facet name="header"> <b><h:outputText value="Funcionário"/></b> </f:facet> </center> <h:outputText value="#{lstConsulta.funcionarios}"/> </t:column> <f:facet name="footer"> <rich:datascroller id="scroll" for="lstConsulta" maxPages="20"> </rich:datascroller> </f:facet> </rich:dataTable> </rich:panel>

25 Respostas

W

Informações adicionais:

Meu bean é do tipo request e o retorno do método “consultaBean.consulta” é um ArrayList

L

Amigo a unica coisa q eu vi q ta diferente do q eu uso é q vc colocou o rich:datascroller dentro do rich:datatable e eu uso ele fora do rich.

E outra coisa amigo cuidado com nomes iguais heim vc colocou o id do datatable como “lstConsulta”

e no var vc ta utilizando o mesmo nome não é aconselhável no mais parece ta de boa

W

Pois é.

Já procurei em um monte de lugar e nada.

Meu resultado fica assim:

<< << << 1 2 >> >> >>

Só que nada ativo.

Com isso, mostra apenas a primeira página.

L

vc ja tirou o seu scroller de dentro do rich:datatable igual te falei?

W

Tire e não mudou nada, alterei o nome do var da tabela.

Me falaram sobre o keepalive… só que não entendi muito.

L

Outra coisa tbem que eu pretei atenção agora q vc falou q seu bean é de request, deve ser isso mesmo
pois o codigo jsf esta de boa

Seguinte quando vc clica para ir para a pagina 2 ele faz uma requisição ajax e logo destroi o seu bean e cria outro

sobre o keepAlive é isso mesmo vc tera q usar ele so q como eu utilizo o spring ele funfa direito com ele logo nao funciona, e não tenho um bom conhecimento sobre ele tbem

W

Leonardo obrigado pela ajuda.

Só que eu não consigo clicar para ir na página 2… este é o meu problema.

A informação é exibida na tela, mas não é um link… apenas um texto comum.

W

Depois da sua ajuda, meu código está desta forma e ainda não funciona! :evil:

<f:subview id="telefones"> <a4j:keepAlive ajaxOnly="true" beanName="consultaBean"/> <a4j:outputPanel id="exibeConsulta" ajaxRendered="true" rendered="#{not empty consultaBean.consulta}"> <rich:dataTable id="lstConsulta" value="#{consultaBean.consulta}" styleClass="tabela_contorno" var="consulta" border="1" rendered="#{not empty consultaBean.consulta}" rows="11"> <t:column width="10"> <center> <f:facet name="header"> <b><h:outputText value="Telefone"/></b> </f:facet> <h:outputText value="#{consulta.telefone}"/> </center> </t:column> <t:column width="160"> <center> <f:facet name="header"> <b><h:outputText value="Secretaria"/></b> </f:facet> </center> <h:outputText value="#{consulta.secretaria}"/> </t:column> <t:column width="190"> <center> <f:facet name="header"> <b><h:outputText value="Departamento"/></b> </f:facet> </center> <h:outputText value="#{consulta.departamentos}"/> </t:column> <t:column width="190"> <center> <f:facet name="header"> <b><h:outputText value="Funcionário"/></b> </f:facet> </center> <h:outputText value="#{consulta.funcionarios}"/> </t:column> </rich:dataTable> <rich:datascroller id="scroll" for="lstConsulta" maxPages="20" rendered="lstConsulta" styleClass="fonte"/> </a4j:outputPanel> </f:subview>

S

voce já tentou criar seu bean com o escopo de sessão?

W

Side… fiz o teste e tbm não funcionou.

J

amigo, tente o seguinte:

na propriedade reRender do rich:datascroller, coloque o id do seu outputpanel.

[]s

obs: não retire o keepAlive do seu código.

W

Fiz o teste e não funcionou.

Já procurei em tudo que é lugar… mas sem sucesso.

Não sei para onde caminhar. :frowning:

J

ai vai um trecho de código pra vc ver:

<a4j:keepAlive beanName="plantaBean" />
			<rich:panel id="pnlPlantas" styleClass="pnlDados">
				<f:facet name="header"> <h:outputText value="Plantas Cadastradas" /> </f:facet>
				<rich:dataTable id="dtPlantas" value="#{plantaBean.plantasList}"
					var="planta" rows="10">
					<rich:column sortBy="#{planta.nome}">
						<f:facet name="header"> <h:outputText value="Nome da Planta" /> </f:facet>
						<h:outputText value="#{planta.nome}" />
					</rich:column>
					<rich:column sortBy="#{planta.cerca.nome}" >
						<f:facet name="header"> <h:outputText value="Nome da Cerca" /> </f:facet>
						<h:outputText value="#{planta.cerca.nome}" />
					</rich:column>
					<rich:column>
						<f:facet name="header"> <h:outputText value="Editar" /> </f:facet>
						<a4j:region>
							<a4j:commandLink actionListener="#{plantaBean.prepareEditPlanta}"
								reRender="pnlCadastro">
								<h:graphicImage value="/img/edit.png" alt="Editar."
									styleClass="imgBorder" />
								<f:param id="idPlantaEdicao" name="idPlantaEdicao"
									value="#{planta.id}" />
							</a4j:commandLink>
							<h:inputHidden value="#{plantaBean.edicao}"
								id="hiddenIdParametro" />
						</a4j:region>
					</rich:column>
					<rich:column>
						<f:facet name="header"> <h:outputText value="Excluir" /> </f:facet>
						<a4j:region>
							<a4j:commandLink actionListener="#{plantaBean.deletePlanta}"
								reRender="pnlCadastro, pnlPlantas"
								onclick="javascript:if(!confirm('Deseja realmente excluir a Planta?'))return false;">
								<h:graphicImage value="/img/delete.gif" alt="Excluir."
									styleClass="imgBorder" />
								<f:param id="idPlantaExclusao" name="idPlantaExclusao"
									value="#{planta.id}" />
							</a4j:commandLink>

						</a4j:region>
					</rich:column>
					<f:facet name="footer">
						<rich:datascroller renderIfSinglePage="true" reRender="pnlPlantas" ajaxSingle="true"/>
					</f:facet>
				</rich:dataTable>
			</rich:panel>

quando vc clica na segunda pagina chega a fazer a requisição? eu vejo isso pelo firegub do firefox, se a requisição eh feita, mas a tela nao atualiza, eh falta de dar reRender em alguma coisa, ou talvez o scroller está validando algum form e não está terminando a requisição certa..

[]s

W

O meu problema é que nem os links das próximas páginas são ativados.

Ele gera todas as páginas, por exemplo:

<< << << 1 2 >> >> >>

Aparece do jeito que está aí acima… só que não está em forma de link.

Pelo que já vi é o seguinte, ele gera todas as páginas só que não consigo ir para a página seguinte.

W

Estou apanhando feio para fazer funcionar.

Alguém poderia me ajudar???

Já li um monte de informação na internet e nada. Já peguei exemplos que “funcionam”, com implementações iguais a minha e nada de funcionar.

VLW galera.

D

w1l14n:
Estou apanhando feio para fazer funcionar.

Alguém poderia me ajudar???

Já li um monte de informação na internet e nada. Já peguei exemplos que “funcionam”, com implementações iguais a minha e nada de funcionar.

VLW galera.

Oi.

Acho que esta faltando isso no seu codigo:

no seu jsp:

</rich:dataTable>
        <br>
        <rich:datascroller for="tabela" maxPages="20" [color=red]binding="#{seubean.scroller}[/color]"/>

no seubean (.java)

public class seubean {

…

private UIDatascroller scroller;
/*********************************************************/
/*      Sets e gets                                      */
/*********************************************************/

public UIDatascroller getScroller() 
{
    return scroller;
}
public void setScroller(UIDatascroller scroller)

{

this.scroller = scroller;

}

…
C

w1l14n você conseguiu resolver seu problema?
To sofrendo com isso também
Se tiver solucionado teria como vc postar aki pra eu ver?
vlw

S

no web.xml setar facelets.BUILD_BEFORE_RESTORE, como false.

C

na verdade consegui resolver o problema configurando o .page.xml da minha view hehe
mas obrigado pela alternativa amigo
abraços \o

S

sei que já faz um tempinho, mas se tiver fácil ai, pode postar essa alteração que você fez, por gentileza? obrigado!

C

claro posso sim amigo
mas pode ser amanha?
é q o projeto ta la no meu serviço… dai chegando amanha la ja posto aki,
mas enquanto isso veja se esse post te ajuda

http://www.guj.com.br/posts/list/216105.java

abraços

C

aqui está meu arquivo view.page.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;page xmlns="http://jboss.com/products/seam/pages"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd"
      login-required="false"&gt;

	&lt;begin-conversation join="true" flush-mode="MANUAL" /&gt;
&lt;/page&gt;

o erro no meu page era que além desse begin q tava ai
tinha outro <begin conversation. apenas removi e deixei dessa forma,
agora funciona normalmente

P

Ola todos, estou com mesmissimo problema. Ao navegar pela paginaçao do rich:scroller o conteudo da minha tabela nao atualiza. Perém ao clicar no cabeçalho de qualquer coluna pra fazer o “Sort by” o conteudo é atualizado. Segue ai minha pagina e MB. O bean scope é do tipo session. O que devo fazer? Ja tentei usar o <a4j:keepAlive beanName="dataScrollerBean" ajaxOnly="true"/> mas tudo que consigo é um nulPointerException e erro de conversão SelectItem.

O JSP

<%@ page contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<html>
    <head>
        <title>Consulta pessoa</title>
        <link rel="stylesheet" type="text/css" href="../css/estilo.css" />
    </head>
    <body>
        <f:view>
            
            <h:form id="frm">
                <h1><h:outputText value="Cadastrados"/></h1>

                <h:messages layout="table" showSummary="true"
                            showDetail="false" globalOnly="true"
                            styleClass="msgErro" infoClass="msgInfo"
                            style="font-weight: bold"/>

                <rich:dataTable id="pessoas" value="#{consultaPessoaBean.pessoas}" var="item" 
                                width="790px" rows="2">

                    <rich:column sortBy="#{item.nome}" width="200px">
                        <f:facet name="header">
                            <h:outputText value="Nome"/>
                        </f:facet>
                        <h:outputText value="#{item.nome}"/>
                    </rich:column>

                    <rich:column sortBy="#{item.tipo}" width="80px">
                        <f:facet name="header">
                            <h:outputText value="Tipo"/>
                        </f:facet>
                        <h:outputText value="#{item.tipo}"/>
                    </rich:column>

                    <rich:column sortBy="#{item.email}" width="200px">
                        <f:facet name="header">
                            <h:outputText value="Email"/>
                        </f:facet>
                        <h:outputText value="#{item.email}"/>
                    </rich:column>

                    <rich:column sortBy="#{item.telefone}" width="50px">
                        <f:facet name="header">
                            <h:outputText value="Telefone"/>
                        </f:facet>
                        <h:outputText value="#{item.telefone}"/>
                    </rich:column>

                    <rich:column width="40px" style="text-align: center">
                        <f:facet name="header">
                                <h:outputText value="Ações"/>
                            </f:facet>
                            <h:commandLink
                                action="#{consultaPessoaBean.excluir}">
                                <f:setPropertyActionListener
                                    value="#{item}"
                                    target="#{consultaPessoaBean.pessoaExclusao}"/>
                                <h:graphicImage
                                    value="/imagens/excluir.png"
                                    title="Excluir"
                                    styleClass="imagemLink"/>
                            </h:commandLink>
                            <h:commandLink action="cadastroPessoa">
                                <f:setPropertyActionListener
                                    value="#{item}"
                                    target="#{cadastroPessoaBean.pessoaEdicao}"/>
                                <h:graphicImage
                                    value="/imagens/editar.png"
                                    title="Editar" styleClass="imagemLink"/>
                            </h:commandLink>
                        </rich:column>
                </rich:dataTable>
                <rich:datascroller for="pessoas" maxPages="20" align="left" reRender="pessoas"/>

                    <br/>

                    <h:commandLink action="#{cadastroPessoaBean.inicializar}"
                                   styleClass="linkComEspaco">
                        <h:outputText value="Nova pessoa"/>
                    </h:commandLink>
                    <h:commandLink action="menu">
                        <h:outputText value="Menu do sistema"/>
                    </h:commandLink>
            </h:form>
        </f:view>
    </body>
</html>

Managed Bean

package com.visao;

import com.dominio.Pessoa;
import com.negocio.PessoaService;
import com.negocio.RegraNegocioException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;


/**
 *
 * @author Boss
 */
public class ConsultaPessoaBean {

    private Pessoa pessoaExclusao = new Pessoa();
    private List<Pessoa> pessoas = new ArrayList<Pessoa>();

    public void consultar(ActionEvent event) {
        this.pessoas = new PessoaService().listarTodas();
    }

    public String excluir() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            new PessoaService().excluir(this.pessoaExclusao);
            this.pessoas.remove(this.pessoaExclusao);

            this.pessoaExclusao = null;
            FacesMessage msg = new FacesMessage(
                    "Excluído com sucesso!");
            msg.setSeverity(FacesMessage.SEVERITY_INFO);
            context.addMessage(null, msg);
        } catch (RegraNegocioException e) {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    e.getMessage(), e.getMessage()));
        } catch (Exception e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage(
                    "Erro inesperado ao tentat excluir!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            context.addMessage(null, msg);
        }

        return null;
    }

    public List<Pessoa> getPessoas() {
        return pessoas;
    }

    public Pessoa getPessoaExclusao() {
        return pessoaExclusao;
    }

    public void setPessoaExclusao(Pessoa pessoaExclusao) {
        this.pessoaExclusao = pessoaExclusao;
    }
}
C

pretourian,

Dentro do seu richDataScroller você tem um componente que é pageIndex… alguma coisa assim
não me lembro mto bem agora, mas através dele você pode informar qual index deseja ver…

Para manipular esse componente você pode setar uma variável int dentro do seu bean

C

debe facer asim:

<rich:datascroller for=“lstConsulta” maxPages=“20” reRender=“lstConsulta”/>

Criado 3 de julho de 2009
Ultima resposta 5 de jun. de 2014
Respostas 25
Participantes 9