Seguinte, na minha aplicação existe um JSCOOKMENU em que eu chamo uma ação {tarifasMB.ExibirProdutos}, em que tarifasMB possui escopo SESSION (não consigo usar o REQUEST de jeito nenhum).
Segue parte do código do managed bean:
public class TarifasMB {
........
........
private List<SelectItem> listaProdutos = new ArrayList<SelectItem>();
public String ExibirProdutos() {
this.listaProdutos.clear();
this.setMensagem("");
FacesContext context = FacesContext.getCurrentInstance();
LoginMB usuario = (LoginMB) context.getExternalContext().getSessionMap().get("loginMB");
List<SisUniProdutos> uni = SisUniProdutosDAO.getInstance().findSisUniProdutos(usuario.getId());
if(uni != null) {
this.setNenhumItem(false);
for(int i=0; i < uni.size(); ++i) {
this.listaProdutos.add(new SelectItem(uni.get(i).getId(), uni.get(i).getNomeproduto());
}
}
else {
this.setNenhumItem(true);
this.setMensagem("NENHUM PRODUTO ENCONTRADO.");
}
return "telaEscolheProduto";
}
E o listaProdutos é listado dentro de um selectItems na pagina.jsp:
<t:selectOneMenu id=“escolha” value="#{tarifasMB.idProduto}">
<f:selectItem itemLabel="------Selecione------" itemValue=""/>
<f:selectItems value="#{tarifasMB.listaProdutos}" />
</t:selectOneMenu>
O que acontece é que, quando eu abro a página.jsp pela primeira vez, os produtos são listados certos. Se eu fizer alguma alteração no banco de dados por exemplo, ele lista certo os produtos nas primeiras vezes, mas, depois de um certo momento, ele passa a exibir na CAIXA DE SELEÇÃO os produtos que estavam anteriormente, ou seja, ele começa a pegar a lista que está armazenada na SESSÃO.
E isso acontece em todas as minhas páginas em que eu preciso armazenar um arrayList na sessão (na verdade como o escopo é session todos os campos ficam na sessão). Se alguém puder me ajudar vou agradecer muito, pois não sei pq essa disgraça do nada resolve pegar dados antigos e NÃO ATUALIZA os dados da sessão com os novos valores do BD.
[/code]