[RESOLVIDO] Remover o Cliente da sessão criada por uma consulta

12 respostas
Diego_Adriano

Bem galera, tenho uma consulta em um cadastro de Clientes que o meu Bean é de Session, o problema é que não consigo remover ele ao clicar no botão limpar …
Eu sei que o botão funciona pois ja testei ele durante o cadastro porém depois de realizada a consulta ele não retira o objeto …

Se alguem ai puder ajudar …
Abraços

12 Respostas

Diego_Adriano

Bem, eu uso esse método no comandLink ‘SAIR’ para sair da aplicação

public String sair (){
	
		HttpSession sessioon = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		sessioon.removeAttribute("autenticado");
		return "login";
	}

Teria como criar outro que use o mesmo contexto e remover o cliente que foi consultado e inserido na sessão ?

E

Você está removendo um atributo da sessão com esse código. É isso que realmente quer ?
Se quiser “destruir” a sessão inteira use session.invalidate();

Diego_Adriano

Não não … Eu uso esse código para o logout …
É assim … o meu bean de Cliente é de Session, então quando eu consulto um cliente ele fica na sessão, correto ?
Agora eu quero remover esse cliente consultado da sessão quando eu clicar em “limpar” que ira limpar o formulário…

E

Rode no modo debug para ver se realmente o objeto está sendo removido da sessão. Caso tiver, problema pode ser o cache do navegador.

JM4X

Cara, o melhor mesmo para logout é utilizar o session.invalidate(), porque se depois vc usar mais de um objeto na sessão vc não precisa mexer no metodo de logout…

[]'s

Diego_Adriano

Quanto ao método de logout eu já entendi e irei alterar ele …
Mas quanto ao que remove o cliente preciso elaborar ele … bem … vou explicar denovo …
Quando eu consulto um cliente na tela de Consulta o Bean que gerencia isso é de Session, então eu preciso remover esse cliente da sessão quando eu quiser limpar a tela … ou seja o cliente que é consultado não tem nada haver com o USUARIO QUE ESTA LOGADO NO SISTEMA !!
espero que tenha ficado mais claro …
Obrigado

JM4X

tenta assim:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("SessionBean");
Diego_Adriano

Só uma duvida, devo alterar o “SessionBean” para o nome do meu Bean … certo ?
No caso ficaria assim:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("ClienteBean");
JM4X

uhum!

funfou?

Diego_Adriano

Hum … funfou não …
Estranho … se eu digitar algo nos campos tipo quando vou inserir um Cliente novo e acionar o botão limpar ele limpa o formulário todo … Porém se eu tiver consultado o cliente ele fica sem ação nenhuma … vou postar os códigos para ficar mais facil …
Acho q eu estou comendo bola em algo …

xhtml:

<h:form   prependId="true" id="cadastroCliente" >
						<h:panelGrid style="text-align:center; align:center;width:100%;" columns="1">
							<p:growl />
								<p:column>	
									<p:commandButton value="Anterior"  ajax="false" update="cadastroCliente" actionListener="#{clienteBean.buscaA}" 	image="ui-icon-arrowthick-1-w"/>			
									<p:commandButton value="Próximo"   ajax="false" update="cadastroCliente" actionListener="#{clienteBean.buscaP}"     image="ui-icon-arrowthick-1-e"/>
									<p:commandButton value="Salvar"    ajax="false" update="cadastroCliente" actionListener="#{clienteBean.verifica}"   image="ui-icon ui-icon-disk"/>
									<p:commandButton value="Limpar"    ajax="true"  update="cadastroCliente" actionListener="#{clienteBean.limparForm}" image="ui-icon ui-icon-trash"
													 process="@form"   immediate="true" type="reset" />
								</p:column>
							<p:separator/>
						</h:panelGrid>

Bean:

public void limparForm(ActionEvent event){
		
		System.out.println("LIMPA CLIENTES");
		this.cliente = new Cliente();
		this.clientes = null;
		/*HttpSession sessioon = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		sessioon.removeAttribute("ClienteBean");*/
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(cliente);
		FacesContext.getCurrentInstance().addMessage("consulta:id", new FacesMessage("Formulário Limpo com Sucesso"));
	}

O botão não esta nem acessando o método …

Diego_Adriano

Fiz a seguinte alteração no botão Excluir:
Removi o “type=“reset””

<p:commandButton value="Limpar"    ajax="true"  update="cadastroCliente" actionListener="#{clienteBean.limparForm}" image="ui-icon ui-icon-trash"  process="@form"   immediate="true" />

Agora ele chama o método, retira o Cliente consultado da sessão, porém não limpa a tela … preciso resolver mais esse problema …
Abraços …

Diego_Adriano

Bem, fiz mais uma alteração no botão e resolvi o problema …
Agora o formulário é limpo e o cliente é removido da seção …
Apenas retirei o “process” e o “immediate” e mudei o “ajax” para false

<p:commandButton value="Limpar"    ajax="false"  update="cadastroCliente" actionListener="#{clienteBean.limparForm}" image="ui-icon ui-icon-trash"/>
Criado 6 de julho de 2011
Ultima resposta 13 de jul. de 2011
Respostas 12
Participantes 3