dataTable repete sempre ultimo registro do banco

2 respostas
D

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

/*
 * 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);
    }
}

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:

2 Respostas

M

[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:

D

Oi Marcos,

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

Abraço, :wink:

Criado 6 de julho de 2006
Ultima resposta 7 de jul. de 2006
Respostas 2
Participantes 2