Atualizar variável a cada nova sessão

Pessoal,

Estou com o seguinte problema: tenho um conjunto de mensagens cadastradas no meu banco de dados, preciso mostrar na tela cada uma dessas mensagens por vez. Para dá o efeito desejado na apresentação dessas mensagens, estou usando o . O problema é que não consigo pegar uma mensagem por vez, só consigo pegar a primeira mensagem.
Coloquei a tag meta para dá um refresh na página após alguns segundos e coloquei o escopo de sessão no bean, mas não deu certo.

O código da tela

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"> 

<h:head>

</h:head>

<body> 
<ui:composition template="_template.xhtml">

<ui:define name="corpo">
<meta http-equiv="refresh" content="15"/>  

<h:form id="formularioMensagem">

				<marquee scrolldelay="2"  direction="left" height="480px">
					<h:outputText value="#{exibicaoMensagemBean.mensagem.texto}" style="font-size:120px"/>
				</marquee>

</h:form>

</ui:define>
</ui:composition>
</body> 
</html>

E o meu bean:

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import br.pe.gov.ses.pme.dao.DAO;
import br.pe.gov.ses.pme.modelo.Mensagem;

@ManagedBean
@SessionScoped
public class ExibicaoMensagemBean {
	
	private Mensagem mensagem = new Mensagem();
	
	private List<Mensagem> lista;
	
	private DAO<Mensagem> dao = new DAO<Mensagem>(Mensagem.class);
	
	public ExibicaoMensagemBean(){
		
	}
	
	@PostConstruct
	public void init(){
		this.lista = dao.listarTodos();
		lerMensagens();
	}

	public void lerMensagens(){
		for(int i = 0; i < this.lista.size(); i++){
			this.mensagem = this.lista.get(i);
		}
	}
	
	public Mensagem getMensagem() {
		return mensagem;
	}

	public void setMensagem(Mensagem mensagem) {
		this.mensagem = mensagem;
	}

	public List<Mensagem> getLista() {
		return lista;
	}

	public void setLista(List<Mensagem> lista) {
		this.lista = lista;
	}

	public DAO<Mensagem> getDao() {
		return dao;
	}

	public void setDao(DAO<Mensagem> dao) {
		this.dao = dao;
	}
	

}

Alguém pode por favor me ajudar?

danipatricia,

Você não precisa do método lerMensagens(). Ele apenas está fazendo seu atributo mensagem apontar para a última mensagem da lista.
Você poderia criar uma variável de instância para fazer a contagem, mas cuidado com acessos simultâneos.
Segue um código de exemplo. Lembro, cuidado com acessos simultâneos.

import java.util.List;  
  
import javax.annotation.PostConstruct;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.SessionScoped;  
import javax.faces.bean.ViewScoped;  
  
import br.pe.gov.ses.pme.dao.DAO;  
import br.pe.gov.ses.pme.modelo.Mensagem;  
  
@ManagedBean  
@SessionScoped  
public class ExibicaoMensagemBean {  
      
    private Mensagem mensagem = new Mensagem();  
      
    private List&lt;Mensagem&gt; lista;  
      
    private DAO&lt;Mensagem&gt; dao = new DAO&lt;Mensagem&gt;(Mensagem.class);

    private int contador;
      
    public ExibicaoMensagemBean(){  
          
    }  
      
    @PostConstruct  
    public void init(){  
        this.lista = dao.listarTodos();  
    }  
  
      
    public Mensagem getMensagem() {
        if (contador == lista.size()) {
           contador = 0; //volta para o início das mensagens
        } else {
            contador ++; //buscar próxima mensagem
        }
        return lista.get(contador);  
    }  
  
    public void setMensagem(Mensagem mensagem) {  
        this.mensagem = mensagem;  
    }  
  
    public List&lt;Mensagem&gt; getLista() {  
        return lista;  
    }  
  
    public void setLista(List&lt;Mensagem&gt; lista) {  
        this.lista = lista;  
    }  
  
    public DAO&lt;Mensagem&gt; getDao() {  
        return dao;  
    }  
  
    public void setDao(DAO&lt;Mensagem&gt; dao) {  
        this.dao = dao;  
    }  
      
  
}

gmmascarin,

Muito obrigada por sua ajuda! Funcionou corretamente! :slight_smile: