Problemas com ViewScoped para buscar bean

3 respostas
A

Boa tarde a todos.
Gostaria de uma ajuda para o seguinte cenário.

Eu tenho uma pagina pessoa.xhtml (cadastro de pesssoa) que é gerencianda pelo managerBeanPessoa. Esse managerBean esta reposável por td que vem da tela pessoa.xhtml, ou seja, tem uma resposabilidade bem definida relacionada a tela pessoa.xhtml. Bem da tela de pessoa eu chamo uma outra tela chamda atendimento.xhtml que fica resposnsável por mostrar alguns dados relacionados ao atendimento. Para essa tela de atendimento eu tenho ou outro ManagerBean chamado managerBeanAtendimento que é responsável por gerenciar a tela atendimento.xhtml. Agora é qie começam os problemas. No meu managerBeanAtendimento eu preciso de alguns daos que existem no ManagerBeanPessoa tais como nomePessoa e empresa. Só que não consigo pegar esses dados quando saio de pessoa.xhtml para atendimento.xhtml. Eu consegui manter os dados utilizando os ManagerBeans com escpo de sessão porém, eu não gostária de usar o escopo de sessão, mas sim o de viewScoped. Ou seja, eu queria pegar os dados de um bean para o outro utilizando o escopo de view.

Alguém poderia me ajudar na busca dessa solução?

3 Respostas

D

Eu não vejo como. Mesmo porque você está fugindo do escopo, quando você diz para um ManagedBean que o escopo deste deve ser @ViewScoped ele irá preservar os dados enquanto a view for mantida, quando você troca de pagina o ManagedBean é destruido.

Se você não quer trocar o escopo do seu ManagedBean (E aqui eu concordo com você, @SessionScoped deve ser utilizado com cuidado)… o que você pode fazer é armazenar os dados que você precisa na sessão pelo seu Bean de pessoa e pega-lo no bean de atendimento.

ex:
No ManagerBeanPessoa:

FacesContext.getCurrentInstance().getExternalContext().getSession(true).setAttribute("nomePessoa", this.getNomePessoa());

e no ManagerBeanAtendimento:

FacesContext.getCurrentInstance().getExternalContext().getSession(true).getAttribute("nomePessoa");

Não sei te dizer se esta é a solução correta… mas acho que funciona.

A

Ola Diego por sua pronta ajuda.
Eu tentei fazer isso isso q vc passou… mas esta dando isso aqui.

Multiple markers at this line
- The method setAttribute(String, String) is undefined for the
type Object

para essa instrução aqui no meu managerBeanPessoa

FacesContext.getCurrentInstance().getExternalContext().getSession(true)).setAttribute("nomePessoa", this.getPessoa().getNome());

Vc poderia me dizer pq?

D

Tente dessa forma:

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
session.setAttribute("nomePessoa", this.getPessoa().getNome());

E no .getAttribute() tambem. Tem que fazer cast do .getSession em um HttpSession… pois o metodo retorna um Object e não um HttpSession por padrão. Desculpa o erro…

Criado 23 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 3
Participantes 2