dataTable repete sempre ultimo registro do banco

Olá,

Estou utilizando JSF MyFaces em uma aplicacao web e nao consegui implementar uma dataTable q funcione, o meu Bean esta gerando uma lista de resultados (List) de uma tabela, mas na hora de mostrar os campos na dataTable a lista nao é iterada corretamente, mostrando sempre o ultimo row repetidamente.

Os codigos:

GeraListaBean.java

[code]/*

  • GeraListaBean.java
  • Created on June 29, 2006, 1:14 PM
    */

package db_beans;

import java.beans.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import util.DataBaseIO;

/**

  • @author Danilo
    */
    public class GeraListaBean extends Object implements Serializable {
    //

    private ArrayList lista;

    private PropertyChangeSupport propertySupport;

    private DataBaseIO db_diario = new DataBaseIO();

    public GeraListaBean() {
    propertySupport = new PropertyChangeSupport(this);
    lista=new ArrayList();
    }

    public List getLista() {
    //
    NoticiaBean noticia = new NoticiaBean();

     if(lista.size()==0) {
         //
         for (int i =1; i <4; i++) {
             //
             Integer aux = new Integer(i);
             String num = new String(aux.toString());
             
             noticia.setTitulo(db_diario.readDatabase("noticias_antigas", "titulo", num));
             noticia.setTexto(db_diario.readDatabase("noticias_antigas", "texto", num));
             
             System.out.println(this.getClass().toString() + "::getLista -> Adicionou: " );
             System.out.println(this.getClass().toString() + "::getLista -> Titulo: " + noticia.getTitulo());
             System.out.println(this.getClass().toString() + "::getLista -> Texto: " + noticia.getTexto());
                             
             lista.add(noticia);
         }
     }
     return lista;
    

    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
    propertySupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
    propertySupport.removePropertyChangeListener(listener);
    }
    }[/code]

Codigo JSP:

<div id="paineldata" style="position:absolute; left:191px; top:730px; width:368px; height:220px; z-index:1; overflow: hidden; visibility: inherit;"> <h:form> <t:dataTable id="data" styleClass="scrollerTable" headerClass="standardTable_Header" footerClass="standardTable_Header" columnClasses="columna_abajoderecha,columna_abajoderecha,columna_abajo" var="noticias" value="#{geraListaBean.lista}" preserveDataModel="true" rows="10"> <h:column> <f:facet name="header"> <h:outputText value="Titulo" /> </f:facet> <h:outputText value="#{noticias.titulo}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Texto" /> </f:facet> <h:outputText value="#{noticias.texto}" /> </h:column> </t:dataTable> </h:form> </div>

Resutltado listado:

Os resultados listados deveriam ser tiutlo1, titulo2, titulo3, texto1, texto2, texto3, mas o ultimo registro aparece 3X repetidos.

id titulo texto
1 titulo3 texto3
2 titulo3 texto3
3 titulo3 texto3

Agradeço qualquer ajuda;

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

[color=“green”][size=“18”]Seja bem vindo ao PJ![/size][/color]

hummm… o problema está na geração da sua lista, porque você está criando apenas um objeto, e quando você adiciona ele a referência dele ainda fica ativa, o que significa que o que for alterado será alterado para todos os registros que fazem referência a ele.

A solução é colocar a linha abaixo dentro do for, para que seja criada uma nova instância a cada interação.

:okok:

Oi Marcos,

Valeu pela ajuda, era esse mesmo o problema, comida de bola fantastica… kkk… :oops:

Abraço, :wink: