javasf@googlegroups.com
[Top] [All Lists]

Re: [javasf] rich:extendedDataTable paginado

Subject: Re: [javasf] rich:extendedDataTable paginado
From: ricardo johannsen
Date: Thu, 21 Apr 2011 21:05:21 -0300
continuando... não consegui colar o codigo da pagina xhtml,mas vou colocar ela como anexo aqui,bem usei o escopo como session,mas vc pode usar o escopo request e colocar keep alive e atualizar a datatable via ajax que tbm funciona.

Boa Páscoa pra todo mundo!!!



Em 21 de abril de 2011 21:00, ricardo johannsen <rjpereira1000000@xxxxxxxxx> escreveu:
E ai Charles ??blz??conseguiu resolver ???
Cara tenho uma solução aqui meio braçal,mas funciona:
1-criar uma classe  helper pra paginação

public class PagingInfo {

//numero de registros que ira trazer de uma vez
   private int batchSize = 5;
    private int firstItem = 0;
    private int itemCount = -1;

    public int getBatchSize() {
        return batchSize;
    }

    public int getItemCount() {
        return itemCount;
    }

    public void setItemCount(int itemCount) {
        this.itemCount = itemCount;
    }

    public int getFirstItem() {
        if (itemCount == -1) {
            throw new IllegalStateException("itemCount must be set before invoking getFirstItem");
        }
        if (firstItem >= itemCount) {
            if (itemCount == 0) {
                firstItem = 0;
            } else {
                int zeroBasedItemCount = itemCount - 1;
                double pageDouble = zeroBasedItemCount / batchSize;
                int page = (int) Math.floor(pageDouble);
                firstItem = page * batchSize;
            }
        }
        return firstItem;
    }

    public void setFirstItem(int firstItem) {
        this.firstItem = firstItem;
    }

    public int getLastItem() {
        getFirstItem();
        return firstItem + batchSize > itemCount ? itemCount : firstItem + batchSize;
    }

    public void nextPage() {
        getFirstItem();
        if (firstItem + batchSize < itemCount) {
            firstItem += batchSize;
        }
    }

    public void previousPage() {
        getFirstItem();
        firstItem -= batchSize;
        if (firstItem < 0) {
            firstItem = 0;
        }
    }


}

2 - criar os métodos auxiliares no mnaged bean(ese meu managed bean estácheio de sujeira pq tava fazendo uns testes aqui considera só as partes do paging info  as buscas)

@ManagedBean(name="pessoaManaged")
@SessionScoped
public class PessoaManaged {

private HtmlDataTable tableDependentes;
private HtmlInputHidden hiddenInput  = new HtmlInputHidden();


private Dependente dependente = new Dependente();

private List<Dependente> dependentes;

    private PagingInfo pagingInfo = null;





   private Pessoa pessoa = null;
   //obteve o mesmo resultado de colocar apenas o metoto get e dar um find dentro
   private ArrayList<Pessoa> pessoas = null;

   private String filtro = "";

    @PostConstruct
    public void init(){

        pessoa = new Pessoa();

        Session s = HibernateUtil.getSessionFactory().openSession();
       Criteria cri = s.createCriteria(Pessoa.class);

     

    

        setPagingInfo(new PagingInfo());



        System.out.println("criando o bean Pessoa Managed");
    }

     public PagingInfo getPagingInfo() {
        if (pagingInfo.getItemCount() == -1) {
            pagingInfo.setItemCount(getPessoaCount());
        }
        return pagingInfo;
    }



         public List<Pessoa> findPessoas() {
        return findPessoas(true, -1, -1);
    }

    public List<Pessoa> findPessoas(int maxResults, int firstResult) {
        return findPessoas(false, maxResults, firstResult);
    }

    private List<Pessoa> findPessoas(boolean all, int maxResults, int firstResult) {
                   Session s = HibernateUtil.getSessionFactory().openSession();

        try {
            Query q = s.createQuery("select object(p) from Pessoa as p");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.list();
        } finally {
            s.close();
        }
    }



      public int getPessoaCount() {

                    Session s = HibernateUtil.getSessionFactory().openSession();

            return ((Long) s.createQuery("select count(p) from Pessoa as p").uniqueResult()).intValue();

    }


        public String next() {

        getPagingInfo().nextPage();
        return "lista_pessoas";
    }

    public String prev() {

        getPagingInfo().previousPage();
        return "lista_pessoas";
    }



     
public String pesquisar(){

            Session s = HibernateUtil.getSessionFactory().openSession();
           Query q =s.createQuery("from Pessoa as pessoa where nome like :param");
           q.setParameter("param", "%"+filtro+"%");
           pessoas = (ArrayList<Pessoa>) q.list();

return "lista_pessoas";
}

      

    public Pessoa getPessoa() {
                System.out.println("executando get em pessoa");

        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
                        System.out.println("dando set em pessoa");

        this.pessoa = pessoa;
    }

public String visualizar(){

   ELFlash.getFlash().put("pessoaManaged",this);

return "view_pessoa";
}

    public List<Pessoa> getPessoas() {
                       //aqui é o grande lançe de trazer apenas uma certa quantidade de registros

               return findPessoas(pagingInfo.getBatchSize(), pagingInfo.getFirstItem());
       
    }

    public void  inserir(){

           Session s = HibernateUtil.getSessionFactory().openSession();

           Transaction tx = s.beginTransaction();
            s.persist(pessoa);
           tx.commit();
            s.close();
           }

 public Pessoa  alterar(){

           Session s = HibernateUtil.getSessionFactory().openSession();

           Transaction tx = s.beginTransaction();
           Pessoa p =  (Pessoa) s.merge(pessoa);
           tx.commit();
            s.close();
            return pessoa;

           }



 public Dependente recuperarDependente(int id){

  Session s = HibernateUtil.getSessionFactory().openSession();

           Dependente pessoa =  (Dependente) s.get(Dependente.class,id);

            s.close();
            return pessoa;


 }


 public Pessoa recuperar(int id){

  Session s = HibernateUtil.getSessionFactory().openSession();

           Pessoa pessoa =  (Pessoa) s.get(Pessoa.class,id);

            s.close();
            return pessoa;


 }




 public String salvar(){

                    System.out.println("clicou em salvar");
if(pessoa == null || pessoa.getId()==0){

      inserir();}else{

      alterar();
      }

 return "lista_pessoas";
 }


 public String novo(){

               System.out.println("clicou em novo");


 return "add_update_pessoa";
 }

public String editarDependente(){

    System.out.println("Editar Dependente");


      //dependente = (Dependente) tableDependentes.getRowData();

    Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    String id = (String) params.get("id");
    System.out.println("setou"+id);
dependente = recuperarDependente(new Integer(id));





hiddenInput.setValue(dependente.getId());
return "add_update_dependente";



}


 @PreDestroy
 public void desroy(){

         System.out.println("destruindo o bean Pessoa Managed");

 }


    public String getFiltro() {
        return filtro;
    }

    /**
     * @param filtro the filtro to set
     */
    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }

    public List<Dependente> getDependentes(){
    return pessoa.getDependentes();
    }

    /**
     * @return the tableDependentes
     */
    public HtmlDataTable getTableDependentes() {


        System.out.println("get data table");

        return tableDependentes;
    }

    /**
     * @param tableDependentes the tableDependentes to set
     */
    public void setTableDependentes(HtmlDataTable tableDependentes) {
        this.tableDependentes = tableDependentes;
    }

    /**
     * @return the hiddenInput
     */
    public HtmlInputHidden getHiddenInput() {
        return hiddenInput;
    }

    /**
     * @param hiddenInput the hiddenInput to set
     */
    public void setHiddenInput(HtmlInputHidden hiddenInput) {
        this.hiddenInput = hiddenInput;
    }

    /**
     * @return the dependente
     */
    public Dependente getDependente() {
        return dependente;
    }

    /**
     * @param dependente the dependente to set
     */
    public void setDependente(Dependente dependente) {
        this.dependente = dependente;
    }

    /**
     * @param pagingInfo the pagingInfo to set
     */
    public void setPagingInfo(PagingInfo pagingInfo) {
        this.pagingInfo = pagingInfo;
    }

}
3 - por fim a pagina de listagem




Em 20 de abril de 2011 09:57, Charles <charles.mineiro@xxxxxxxxx> escreveu:

valeu pela ajuda Messias.

como sou novato com jsf e adjacências estou com dificuldades.

antes de enviar esse pedido d socorro procurei bastante no oráculo
(google) e tb encontrei este teu primeiro exemplo, juntamente com os q
segue abaixo, mas estava um pouco complicado. assim, pensei q tvz ñ
precisasse reinventar a roda... =S

baum, se vc tiver alguma informação a+ q julgar pertinente e/ou
necessária e puder compartilhar conosco ficarei muito feliz pois
pretendo trabalhar sobre isso, no feriadão... =(

em paralelo: alguém sabe me dizer oq tem errado com meu dataTable com
dataSroll do email anterior pra ñ funfar a paginação?

muito obrigado Srs.

[]'s

http://eclecticprogrammer.com/2008/06/25/sorting-and-paginating-in-the-database-with-richfaces/
http://seamframework.org/Community/TroublesToUseDatascrollerAndExtendedDataModel
http://community.jboss.org/message/492347#492347
http://stackoverflow.com/questions/3707897/richfaces-extendedtabledatamodel-sorting-columns-retrieves-all-rows/3734654#3734654


2011/4/19 David Faulstich <davidfdr@xxxxxxxxx>:
> Grande messias...
> mande os fontes para nós!!
>
> Sua saída parece ser bem avançada e simples.
>
>
> abraços.
>
> david
>
> Em 19 de abril de 2011 16:05, Mesias <ale.mesias@xxxxxxxxx> escreveu:
>>
>> Paginação é um pouco mais complicado que isso
>> Para paginação (sem filtros) que foi base para o que fiz:
>>
>> http://www.seamframework.org/Community/RichfacesDatascrolerEntityQueryAndPagination
>> Este exemplo parece bom também:
>>
>> http://eclecticprogrammer.com/2008/07/30/a-generic-superclass-for-sorting-and-paginating-in-the-database-with-richfaces/
>>
>> https://issues.jboss.org/secure/attachment/12331563/PagedDataModel.java
>> Sua classe terá que ter este formato:
>> public class SuaClasse<T> extends ExtendedDataModel implements Modifiable
>> O <T> que seria da classe de sua entidade a IDE não vai conseguir pegar,
>> único lugar que vi isso ter serventia é no primefaces com o LazyPagination
>> dele.
>> O mais importante é o metodo:
>>
>> public void walk(final FacesContext context, final DataVisitor visitor, final Range range, final Object argument)
>> Que é quem vai ser chamado a cada paginação. Se ver os o link do
>> ecleticprogrammer e o arquivo java que enviei, em ambos
>> os casos ele usa um booleano para identificar se a busca no banco já foi
>> feita ou não, pois a cada vez que a tela é carregada
>> ele acessa novamente o Walk. Foi a parte que foi mais dificil montar.
>> public void update()
>> Que determina que os dados foram modificados e uma busca nova ao banco
>> deve ser feita.
>> public int getRowCount()
>> Deve ser feita uma busca para determinar o total de dados da busca. Não
>> apenas os que vão ser mostrados na tela (geralmente 10)
>> Usando a Interface Modifiable você terá este metodo (vide arquivo java):
>> public void modify(List<FilterField> filterFields, List<SortField2>
>> sortFields) {
>> Que te passa todos os dados dos filtros e das ordenações.
>> Peço desculpas se estiver dificil de entender é que respondi da minha casa
>> o mail, no meu trabalho tem os fontes do que eu fiz. Mas basicamente procure
>> por ExtendedDataModel, o Modifiable é bem mais dificil de encontrar
>> exemplos, mas há sim.
>>
>> 2011/4/19 Charles <charles.mineiro@xxxxxxxxx>
>>>
>>> obrigado pela ajuda =)
>>>
>>> tentei utilizar o datascroller com o extendedDataTable mas ñ tá
>>> rolando. Messias, vc poderia me dar algumas coordenadas?! =S
>>>
>>> alias, ñ estou conseguindo paginar nem um com dataTable normal. na
>>> minha aplicação tenho oq segue:
>>>
>>> <rich:datascroller for="" maxPages="5" align="left"
>>> binding="#{defaultBean.scroller}" />
>>> <rich:dataTable id="acoesList" var="row" rows="8"
>>> rowClasses="odd-row,even-row" value="#{defaultBean.acoes}">
>>> ...
>>> </rich:dataTable>
>>> ------------------------------------------------------------------
>>> defaultBean.java
>>> ...
>>> private UIDatascroller scroller;
>>> ...
>>> public UIDatascroller getScroller()
>>> {
>>>      return scroller;
>>> }
>>> public void setScroller(UIDatascroller scroller)
>>> {
>>>      this.scroller = scroller;
>>> }
>>> ...
>>> ----------------------------------------------------------------
>>> meu DAO:
>>> ...
>>>   public List<SuperEntity> findAll()
>>>   {
>>>      Query q = this.entityManager.createNamedQuery("Acao.findAll");
>>>      q.setFirstResult(40);
>>>      return (q.getResultList());
>>>   }
>>> ...
>>>
>>> Alguém pode me ajudar com este dataSroller?
>>>
>>> muito obrigado a tds.
>>> []'s
>>>
>>>
>>>
>>>
>>> 2011/4/19 Mesias <ale.mesias@xxxxxxxxx>
>>> >
>>> > Usei o datascroller no extendedDataTable. Com alguns adicionais que
>>> > fizemos, como poder digitar o número da pagina para pular direto, mostrava o
>>> > primeiro e o ultimo numero de item para cada página, coisas assim.
>>> > Primefaces tem essas coisas prontas no componente dele, problema que ele não
>>> > tem controle das colunas como o Richfaces faz, que você escolher as colunas
>>> > que vai mostrar e mudar a ordem e a largura.
>>> >
>>> > 2011/4/18 Charles <charles.mineiro@xxxxxxxxx>
>>> >>
>>> >> os motivos para utilizá-lo são:
>>> >> 1- praticidade, já tem td ali prontinho só precisa colocar,
>>> >> praticamente, os parâmetros q usuaria em um dataTable;
>>> >> 2- como o pessoal vai utilizar quase q exclusivamente para consulta
>>> >> optei pela opção com +recursos e, teoricamente, menos esforço.
>>> >> ñ preciso de uma perfomance absurda de boa mas ñ há como ficar
>>> >> esperando uns 40 segundos para cada solicitação como esta atualmente pois td
>>> >> esta sendo enviado pelo BD.
>>> >> utilizei o dataScroller com dataTable mas o resultado ñ foi o
>>> >> promeitido, parece q tenho q configurar a paginação manualmente tb. pode ser
>>> >> q esteja utilizado da forma errada.
>>> >> se alguém tiver algo pra me ajudar ficarei muito agradecido msm!
>>> >>
>>> >> []'s
>>> >> segue código:
>>> >> <rich:extendedDataTable
>>> >> id="table" columnClasses="headerText" binding="#{defaultBean.table}"
>>> >> value="#{defaultBean.acoes}" var="row" sortMode="single"
>>> >> height="390px" width="645px" rendered="true"
>>> >> selectionMode="single" selection="#{defaultBean.selection}">
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.processo}" width="110px"
>>> >> filterBy="#{row.processo}" filterEvent="onkeyup" label="Processo">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="Processo" /></f:facet>
>>> >> <h:outputText value="#{row.processo}" />
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.valorPrincipal}"
>>> >> width="90px" style="text-align: right;"
>>> >> filterBy="#{row.valorPrincipal}" filterEvent="onkeyup"
>>> >> label="Valor(R$)">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="Valor(R$)" /></f:facet>
>>> >> <h:outputText value="#{row.valorPrincipal}">
>>> >> <f:convertNumber type="currency" currencySymbol=""/>
>>> >> </h:outputText>
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.acaoTrans}" width="70px"
>>> >> filterBy="#{row.acaoTrans}" filterEvent="onkeyup" label="Trans">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="Trans" /></f:facet>
>>> >> <h:outputText value="#{row.acaoTrans}"/>
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.ultimaAnalise}"
>>> >> width="70px"
>>> >> filterBy="#{row.ultimaAnalise}" filterEvent="onkeyup" label="Análise">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="Análise" /></f:facet>
>>> >> <h:outputText value="#{row.ultimaAnalise}"/>
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.acaoNumero}" width="100px"
>>> >> filterBy="#{row.acaoNumero}" filterEvent="onkeyup" label="Nº da ação">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText" value="Nº
>>> >> da ação" /></f:facet>
>>> >> <h:outputText value="#{row.acaoNumero}" />
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.paj.assunto}" width="100px"
>>> >> filterBy="#{row.paj.assunto}" filterEvent="onkeyup" label="Assunto">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="Assunto" /></f:facet>
>>> >> <h:outputText value="#{row.paj.assunto}" styleClass="headerText" />
>>> >> </rich:column>
>>> >>
>>> >> <rich:column sortable="true" sortBy="#{row.interessado.cpfCnpj}"
>>> >> width="110px"
>>> >> filterBy="#{row.interessado.cpfCnpj}" filterEvent="onkeyup"
>>> >> label="CPF/CNPJ">
>>> >> <f:facet name="header"><h:outputText styleClass="headerText"
>>> >> value="CPF/CNPJ" /></f:facet>
>>> >> <h:outputText value="#{row.interessado.cpfCnpj}" />
>>> >> </rich:column>
>>> >> <a4j:support limitToList="true" event="onselectionchange"
>>> >> ajaxSingle="true"
>>> >> action="" reRender="barraBotoes"/>
>>> >> </rich:extendedDataTable>
>>> >>
>>> >> 2011/4/18 Mesias <ale.mesias@xxxxxxxxx>
>>> >>>
>>> >>> extendedDataTable justifica utilizar se precisar dos Filtros em cada
>>> >>> coluna. Cheguei a montar paginação no extendedDataTable
>>> >>> com richfaces+hibernate. Spring deve ficar mais tranquilo. A solução não é
>>> >>> nem um pouco tranquila, principalmente se for misturar os filtros do
>>> >>> ExtendeddataTable com alguma busca fora do componente.
>>> >>>
>>> >>>
>>> >>> 2011/4/18 Sérgio Fantin <sergio.lnd.fantin@xxxxxxxxx>
>>> >>>>
>>> >>>> Se puder usar o dataTable padrão você ficará mais satisfeito com a
>>> >>>> performance, pois o rich:extendedDataTable é bem lento.
>>> >>>> Abraços...
>>> >>>> 2011/4/18 Phillip Tessuto <phillip.tessuto@xxxxxxxxxxxxxxxxx>
>>> >>>>>
>>> >>>>> Boa tarde pessoal,
>>> >>>>>
>>> >>>>> Por quê não utilizar do rich:dataTable ???!!
>>> >>>>> Lá podemos paginar com <rich:datascroller>
>>> >>>>> Veja um exemplo...é bem simples :
>>> >>>>> <rich:datascroller align="center" for=""> >>> >>>>> maxPages="numero_maximo_paginas" id="id_data_scroller" />
>>> >>>>>
>>> >>>>> Valeu galera...
>>> >>>>> Espero ter ajudado em algo.
>>> >>>>> Abs,
>>> >>>>> Phillip Tessuto
>>> >>>>>
>>> >>>>> Web Developer
>>> >>>>>
>>> >>>>> T: (55 11) 5102-2880 | ramal 19
>>> >>>>> @: phillip.tessuto@xxxxxxxxxxxxxxxxx
>>> >>>>> S: webtraffic.com.br
>>> >>>>>
>>> >>>>>
>>> >>>>> ----- Mensagem original -----
>>> >>>>> De: "Marcio" <chicomarcio@xxxxxxxxx>
>>> >>>>> Para: javasf@xxxxxxxxxxxxxxxx
>>> >>>>> Enviadas: Segunda-feira, 18 de Abril de 2011 16:00:50
>>> >>>>> Assunto: Re: [javasf] rich:extendedDataTable paginado
>>> >>>>>
>>> >>>>> manda o codigo jsf da tabela o  rich:extendedDataTable
>>> >>>>>
>>> >>>>> 2011/4/18 Charles <charles.mineiro@xxxxxxxxx>
>>> >>>>>>
>>> >>>>>> Boa tarde.
>>> >>>>>>
>>> >>>>>> Descobri rescentemente, graças ao Ricardo e Flávio, q preciso
>>> >>>>>> paginar
>>> >>>>>> uma consultinha ao MySQL.
>>> >>>>>>
>>> >>>>>> A minha tabela tem 15 campos sendo 4 relacionamentos "oneToMany"
>>> >>>>>> com
>>> >>>>>> outras quatro tabelas.
>>> >>>>>>
>>> >>>>>> Como tenho no momento +/- 3.000 registros na tabela principal por
>>> >>>>>> questão de desempenho preciso fazer a paginação desta consulta.
>>> >>>>>>
>>> >>>>>> Utilizo um rich:extendedDataTable para visualizar o conteúdo
>>> >>>>>> devido as
>>> >>>>>> suas funcionalidades pois após migrar os dados e algumas
>>> >>>>>> atualização a
>>> >>>>>> grande maioria dos usuários utilizarão quase que exclusivamente
>>> >>>>>> para
>>> >>>>>> pesquisas.
>>> >>>>>>
>>> >>>>>> Assim, alguém tem algo que possa me orientar no desenvolvimento da
>>> >>>>>> paginação da pesquisa para o rich:extendedDataTable?
>>> >>>>>>
>>> >>>>>> Estou utilizando richfaces+spring+hibernate.
>>> >>>>>>
>>> >>>>>> Toda a ajuda será bem-vinda.
>>> >>>>>>
>>> >>>>>> []'s
>>> >>>>>> t++
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> P.S.: Preciso disponibilizar urgentemente a pesquisa do que já
>>> >>>>>> temos
>>> >>>>>> nas tabelas, assim, qm puder ajudar com algo ficarei muito
>>> >>>>>> agradecido.
>>> >>>>>>
>>> >>>>>> --
>>> >>>>>> Alice: Pode me dizer, por favor, por que caminho devo ir?
>>> >>>>>> Gato: Isto tem muito a ver com o lugar onde queres chegar.
>>> >>>>>> Alice: Qualquer lugar.
>>> >>>>>> Gato: Neste caso qualquer caminho serve.
>>> >>>>>> (ALICE NO PAÍS DAS MARAVILHAS, Lewis Carol)
>>> >>>>>>
>>> >>>>>> --
>>> >>>>>> Você recebeu esta mensagem por que é membro do  Javasf
>>> >>>>>> http://groups.google.com/group/javasf
>>> >>>>>>
>>> >>>>>> Conheça também o Java Brazil:
>>> >>>>>> http://groups.google.com/group/thejavabrazil
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> --
>>> >>>>>  ats,
>>> >>>>>
>>> >>>>>  Francisco Marcio
>>> >>>>>  Arquiteto Desenvolvedor Java
>>> >>>>>  Sun Certified Java Programmer 5.0
>>> >>>>>  http://chicomarcio.blogspot.com/
>>> >>>>>  http://br.linkedin.com/pub/francisco-marcio-da-silva/20/969/8aa
>>> >>>>>  Skype chicomarcio
>>> >>>>>  Celular +55 61 85122102
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> --
>>> >>>>> Você recebeu esta mensagem por que é membro do Javasf
>>> >>>>> http://groups.google.com/group/javasf
>>> >>>>>
>>> >>>>> Conheça também o Java Brazil:
>>> >>>>> http://groups.google.com/group/thejavabrazil
>>> >>>>> --
>>> >>>>> Você recebeu esta mensagem por que é membro do Javasf
>>> >>>>> http://groups.google.com/group/javasf
>>> >>>>>
>>> >>>>> Conheça também o Java Brazil:
>>> >>>>> http://groups.google.com/group/thejavabrazil
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> --
>>> >>>> Sérgio Fantin
>>> >>>> http://serjaum.wordpress.com
>>> >>>> --
>>> >>>> Você recebeu esta mensagem por que é membro do Javasf
>>> >>>> http://groups.google.com/group/javasf
>>> >>>>
>>> >>>> Conheça também o Java Brazil:
>>> >>>> http://groups.google.com/group/thejavabrazil
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>> ======================================
>>> >>> Alejandro Mesias André Nebra Perez
>>> >>> Java/Python/Js/Something else Programmer
>>> >>> Skype.: meszias
>>> >>> Msn.:    amoavidasobre2rodas@xxxxxxxxxxx
>>> >>> Twitter: @meszias
>>> >>> Linux User #442506
>>> >>> Campinas - SP - Brasil - South America
>>> >>> ======================================
>>> >>> --
>>> >>> Você recebeu esta mensagem por que é membro do Javasf
>>> >>> http://groups.google.com/group/javasf
>>> >>>
>>> >>> Conheça também o Java Brazil:
>>> >>> http://groups.google.com/group/thejavabrazil
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Alice: Pode me dizer, por favor, por que caminho devo ir?
>>> >> Gato: Isto tem muito a ver com o lugar onde queres chegar.
>>> >> Alice: Qualquer lugar.
>>> >> Gato: Neste caso qualquer caminho serve.
>>> >> (ALICE NO PAÍS DAS MARAVILHAS, Lewis Carol)
>>> >>
>>> >> --
>>> >> Você recebeu esta mensagem por que é membro do Javasf
>>> >> http://groups.google.com/group/javasf
>>> >>
>>> >> Conheça também o Java Brazil:
>>> >> http://groups.google.com/group/thejavabrazil
>>> >
>>> >
>>> >
>>> > --
>>> > ======================================
>>> > Alejandro Mesias André Nebra Perez
>>> > Java/Python/Js/Something else Programmer
>>> > Skype.: meszias
>>> > Msn.:    amoavidasobre2rodas@xxxxxxxxxxx
>>> > Twitter: @meszias
>>> > Linux User #442506
>>> > Campinas - SP - Brasil - South America
>>> > ======================================
>>> >
>>> > --
>>> > Você recebeu esta mensagem por que é membro do Javasf
>>> > http://groups.google.com/group/javasf
>>> >
>>> > Conheça também o Java Brazil:
>>> > http://groups.google.com/group/thejavabrazil
>>>
>>>
>>>
>>> --
>>> Alice: Pode me dizer, por favor, por que caminho devo ir?
>>> Gato: Isto tem muito a ver com o lugar onde queres chegar.
>>> Alice: Qualquer lugar.
>>> Gato: Neste caso qualquer caminho serve.
>>> (ALICE NO PAÍS DAS MARAVILHAS, Lewis Carol)
>>>
>>> --
>>> Você recebeu esta mensagem por que é membro do  Javasf
>>> http://groups.google.com/group/javasf
>>>
>>> Conheça também o Java Brazil:
>>> http://groups.google.com/group/thejavabrazil
>>
>>
>>
>> --
>> ======================================
>> Alejandro Mesias André Nebra Perez
>> Java/Python/Js/Something else Programmer
>> Skype.: meszias
>> Msn.:    amoavidasobre2rodas@xxxxxxxxxxx
>> Twitter: @meszias
>> Linux User #442506
>> Campinas - SP - Brasil - South America
>> ======================================
>>
>> --
>> Você recebeu esta mensagem por que é membro do Javasf
>> http://groups.google.com/group/javasf
>>
>> Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
>
> --
> Você recebeu esta mensagem por que é membro do Javasf
> http://groups.google.com/group/javasf
>
> Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
>



--
Alice: Pode me dizer, por favor, por que caminho devo ir?
Gato: Isto tem muito a ver com o lugar onde queres chegar.
Alice: Qualquer lugar.
Gato: Neste caso qualquer caminho serve.
(ALICE NO PAÍS DAS MARAVILHAS, Lewis Carol)

--
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil


--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
<Prev in Thread] Current Thread [Next in Thread>