ManagedBean SessionScoped e RequestScoped

Meu caros tenho um probleminha:

Tenho uma pequena aplicação JSF 2.0 e primefaces que consiste basicamente de telas de pesquisa que preenchem datatable e neste cada linha possui botões que abrem telas de edição do registro selecionado, que é passado pra edição via setPropertyActionListener.

Os managedBean estão SessionScoped justamente pelo fato de quando selecionar um item do datatable e alterá-lo na tela de edição (o mesmo managedBean que lista os registros também grava/exclui ) , retorno para tela de pesquisa com o datatable preenchido e atualizado e com SessionScoped facilitou muito. Porém o tomcat do servidor que hospedo está dando permGen direto, enfim quero mudar pra ResquestScoped .
Pergunto:

  • Tenho que separar o managedBean em edicao e de pesquisa pra passar o registro pesquisado para a edição e a lista de objetos pesquisados de volta pra tela de pesquisa?
  • Quando voltar da tela de edição para a de pesquisa, como faço pra ter a tela de pesquisa preenchida com os registros anteriormente pesquisados (tenho que passar a lista dos itens pesquiados para o managedBean de ediçao quando vou alterar e passar a lista de volta para o managedBean de pesquisa?).

A sua tela de edição é um dialog ou uma outra página ? Se for um dialog, podes usar o viewscoped !

Usa @VewScope nos seus managedBean, tenta separar objetos que você preenche para gravar no banco com objetos que voce seleciona para alteração e exclusão.
E toda vez que fazer uma operação no banco você limpa tua lista, pois cada com este scope o ciclo de vida e por renderização.

	public Collection<Empresa> getListaEmpresa() {
		if(listaEmpresa == null) {
			ObjectBDSearch<Empresa> dao = new EmpresaDAO();
			listaEmpresa = dao.findAll();
		}
		return listaEmpresa;
	}

Mas você não consegue atualizar o datatable após inserir/editar ? Assim ele recarrega a lista.

Não há necessidade de ser SessionScoped.

Cara, sua tarefa não vai ser fácil.

Vai estourar diversos erros. Esse é o problema do SessionScoped, ocupar muita memória do servidor.

O que você poderá fazer:

  1. Utilizar o ViewScoped. Assim que o usuário mudar de tela os dados voam.
  2. Utilize a consulta paginada. Não busque todos os itens existes no banco. Utilize o lazy do JPA também (caso se aplique).
  3. Datatable com RequestScoped costuma dar problema caso você venha a utilizar dialog ou coisas assim.
  4. Não tente alterar a tela/mb que já existe. É melhor você criar uma nova, aí você vai adicionando os componentes aos poucos (copiar e colar mesmo). Creio que assim fica mais fácil de tratar os erros que forem aparecendo.

Bem, aqui tem vários links que podem de ajudar:

  1. JSF Mini Livro - Dicas, conceitos e boas práticas // Para entender melhor os escopos do JSF
  2. Lazy JSF Datatable Pagination (Primefaces) // Consulta paginada utilizando primefaces. Caso você não esteja utilizando o Primefaces, o conceito que se deve aplicar é o mesmo.
  3. Aplicação Web Completa JSF EJB JPA JAAS // Utilizando um datatble puro com request scope. Você pode reparar que o primefaces não foi utilizado
    Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate // Mostra como realizar um datatable com viewscoped e dialogs com Primefaces.

OBS.: Só achei engraçado que todos os links são de um mesmo blog que se encontra por aí. :lol: :lol: :lol:

Pessoal,

edudebom : minha tela de edição é outra página. Realmente quando eu saio da tela de alteração , executo uma action que recarrega a lista e exibe a tela. Quando tentei Viewscope dataTable não atualizava. Mas como já faz um tempo vou tentar pra ver…

jtiagoarruda: quando eu estava criando , tentei usar VieweScoped, mas eu atualizava o registro, mas quando voltava o dataTable não atualizava, por isso mantive o sessionScoped. Os managedBean’s chamam Service’s que incluem/alteram/pesquisam os dados.

Fala jakefrog, esses link’s são referência :slight_smile: .
Andei olhando um em que vc armazena o id mas te confesso que não li com a devida atenção.

Exato ! Esse foi um dos motivos que eu usei o Session, tenho um botão em que pega o item selecionado e colocava os dados pra alterar e gravar, cara, não preenchia os dados no dialoig nem a pau!! E essa operação é importante que seja feita com registro selecionado do dataTable.

Nem me fale, o que já apanhei disso não foi brincadeira.

Bom, vou dar uma boa estudada com calma e vou testando.
Agradeço imensamente a ajuda de todos!!!