Dúvidas com o applicationScoped JSF

Ola pessoal, estou com um probleminha aqui, tenho uma aplicação que faz uma listagem em uma tabela dos dependentes de um funcionário, no entanto para fazer isso usei o dataTable do primerfaces e para funcionar tudo direitinho tive que colocar uma anotação no meu MB que é a @ApplicationScoped e a @ManagedBean(eager=true), até ai tudo bem, o problema é que não sei limpar esse escopo, ou seja quando saio da página e volto novamente os dados continuam lá, como faço para resolver isso??? Desde já agradeço pela atenção de todos.

Cara, você sabe para que serve o application scoped? como funciona? quando deve ser utilizado?

Leia esse post onde ele fala sobre SessionScoped. Lá ele explica para que serve cada escodo do jsf. JSF Mini Livro - Dicas, conceitos e boas práticas

Do modo como você está utilizando, está totalmente errado.

Tem algo errado
não precisa usar esse escopo para que todos os dados do func
seja retornado

poste suas classes ai

Att

É cara acho que você “pulou” muita coisa, você não pode (pelo menos não deveria) já ir usando dataTable do primefaces e muitas outras coisas sem entender o que são, como funcionam e quando devem ser usados os escopos do JSF.

Recomendo ler algumas apostilas livros, por exemplo pode ler o material do Hebert Coelho, apostila da K19, e livros como Core Java Server Faces 3º edição.

Boa sorte.

Bom deixa eu explicar melhor, pra trazer os dados de em uma tabela é muito simples o problemas ta na hora de selecionar um dado desse para alteração. no modo request não ia dado nenhum quando clicava em alterar no session tava dando erro de io serializacion apenas o applicationScoped funcionou vou postar os codigos para entedenrem melhor.

Essa é a tabela:

<p:dataTable id=“tabela” var=“dep” value="#{dependentesBean.dependentesLista}" emptyMessage=“Lista Vazia”>

<f:facet name="header">  
        Lista de dependentes 
</f:facet>  
  
      
<p:column headerText="Nome">  
      #{dep.nomeDependente}  
</p:column>  
  
<p:column headerText="Nacimento">  

<h:outputText style=“width:50px” value="#{dep.dataNacimento}">
<f:convertDateTime pattern=“dd/MM/yyyy” locale=“pt”></f:convertDateTime>
</h:outputText>

</p:column>  
  
<p:column headerText="Dep. IRPF">  
       <p:selectBooleanCheckbox disabled="true" value="#{dependentesBean.dependentes.depIRPF}" /> 
</p:column>  
  
  
<p:column headerText="Sal. Família">  
       <p:selectBooleanCheckbox disabled="true"  value="#{dependentesBean.dependentes.salariofamilia}" />
</p:column>  


<p:column headerText="Parentesco">  
        #{dep.grauParentesco}  
</p:column>  
  
<p:column style="width:4%">  
       <p:commandButton id="selectButton"  update=":form:dialog" oncomplete="Dialog.show()" icon="ui-icon-pencil" title="Editar">  
             <f:setPropertyActionListener value="#{dep}" target="#{dependentesBean.dependentes}" />  
       </p:commandButton>  
</p:column>  
  
 <p:column style="width:4%">  
        <p:commandButton id="deletButton"  update=":form:tabela" oncomplete="exclusao.show()" icon="ui-icon-closethick" title="Excluir">  
             <f:setPropertyActionListener value="#{dep}" target="#{dependentesBean.dependentes}" />  
        </p:commandButton>  
</p:column>  
  
</p:dataTable> 

Quando clico no botão editar vai abrir um dialog com os dados (da linha que selecionei) para alteração mas antes disso ele seta no objeto depedentes dos dados selecionado, e para isso funcionar tive que usar MB como applicationScoped session também funciona mas quando coloco ele da erro de io exception no serializable ja atém implementei o Serializable mas não deu certo. Vou postar tb o meu MB

@ManagedBean(eager=true)
@ApplicationScoped
public class DependentesBean {

 Dependentes dependentes = new Dependentes();
 FacesContext context = FacesContext.getCurrentInstance();
     DadosPessoais dadosPessoais = new DadosPessoais();
     ArrayList<Dependentes> dependentesLista = new ArrayList<Dependentes>();

. . .

ja procurei em tudo que é lugar encontrei o mesmo problema mas sem solução.

[quote=nakhan]ja procurei em tudo que é lugar encontrei o mesmo problema mas sem solução.[/quote]Pq o povo prefere fazer sem estudar do que estudar para depois fazer.

Leia o post lá que explica a diferença entre escopos. Se você quer ver um exemplo que tem um datatable paginado aqui tem: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate.

É cara acho que você “pulou” muita coisa, você não pode (pelo menos não deveria) já ir usando dataTable do primefaces e muitas outras coisas sem entender o que são, como funcionam e quando devem ser usados os escopos do JSF.

Recomendo ler algumas apostilas livros, por exemplo pode ler o material do Hebert Coelho, apostila da K19, e livros como Core Java Server Faces 3º edição.

Boa sorte.[/quote]

Bom não disse que minha aplicação ta dando pau ela ta funcioando perfeitamente, mas só consegui faze-la funcionar pelo jeito que falei antes, o problema é que eu gostaria de fazer rodar com o primefaces como muitas coisas que ja utilizo dele não é questão de estudar, isso eu ja faço, não achei um exemplo e nem explicação disso funcionando no post do hebert e nem na k19 la tem falando sobre tabelas sim mas não do modo de seleção de uma linha, como eu disse antes fazer a tabela funcionar isso é muito simples agora selecionar uma linha é que ta pegando. Acho que vou ter que fazer de outro modo, Pq tenho um autocomplete na mesma pagina onde escolho o funcionário pra depois atualizar a tabela talvez seja por tenho que faze-los separados ou seja autocomplete primeiro em modo request de pois chama outra pagina com a tabela no modo session ou view, pois se colo ou view ou session da pau na aplicação.

Ok depois de muita macumba consegui resolver o problema, para aqueles que futuramente venham a ter esse mesmo problema talvez essa solução possa ajuda-los:

1º o primefaces para se trabalhar com tabelas e colocar aquele botãozinho no final de cada linha para alter ou excluir o MB não pode ser request de jeito nenhum ele tem que ser de escopo viewScoped se não na hora que vc clicar naquele botãozinho não vai acontecer nda nem erro nem nada mesmo.

2º se quando colocar viewScoped e der um erro de IO Sereializable exception na execução da ap. implemente no seu MB o Serializable e tambem nos objetos criados nele inclusive o DAO que faz as transações no banco OBS: caso esteje utilizando o objeto FacesContext ou um outro objeto que não vá ser Serializable coloque transient na sua criação, evitando o erro nele tb.

Fazendo isso a AP vai fumegar que uma maravilha!

Sei que sou um pouco leigo no assunto mas era essa a resposta que eu tava procurando depois de fuçar detalhe por detalhe desde a raiz do problema coisa que gosto de fazer consegui resolver. Sei que pra muitos isso é uma coisa banal mas pra mim e muitos outros que ainda estão no meio do caminho ainda é coisa de outro mundo não quero menosprezar ninguém mas infelizmente passei uma semana procurando em forums apostilas livros e não tive respostas, apenas me mandaram estudar mais pq então não me responderam ja que sabem tanto, desculpe isso é apenas meu desabafo to meio estressado é que as vezes certas respostas machuca agente que é leigo o tem alguns que faltam bater na gente pra responder. O dia que eu for um bom programador prometo que responderei de modo claro e preciso como fiz agora pouco. Agradeço a todos que me responderam muito obrigado mesmo. Hebert seu posts são muito bons vou estudar mais por eles. Parabéns pela iniciativa.