Alterar valor de um Bean que está na sessão JSF

Pessoal me explicaram que assim consigo colocar um bean na sessão com JSF:

   FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", objeto);  

Nesse usuário na sessão tem um atributo perfil com um valor xxx, depois de uma determinada ação eu queria setar outro valor nesse atributo perfil agora com yyyy, mas isso dentro de um backing bean…

assim: usuário navegando, fez uma ação, que executa um método no backing bean, e ai ele seta o novo valor nesse atributo…e o usuario continua navegando normal na sessão com todos os outros valores sendo os mesmos…
tem como fazer isso :?:

Faça assim:

Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario"); usuario.setPerfil("novo perfil"); FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", usuario);

Cara é o seguinte… primeiramente seu conceito de JSF ta um pouco errado… e é muito mais simples do que se imagina…

Não sei se vc notou, mas no faces-config.xml de seu projeto estão descritos todos seus managebeans e suas navegações, correto??

Existe uma propriedade para cada ManageBean, chamada , onde vc define se vai ser request ou session… ai que ta o grande ponto, vc pode utilizar as classes que estão com escopo session para colocar as informaçoes que vc necessita.

Abaixo vou descrever um exemplo:

package seuPackage;

public class SessionUsuario{

	public SessionUsuario(){

	}

	private String nomeUsuario;
	private Integer idUsuario;

	public Integer getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getNomeUsuario() {
		return nomeUsuario;
	}

	public void setNomeUsuario(String nomeUsuario) {
		this.nomeUsuario = nomeUsuario;
	}

}

Esta classe acima será a minha classe que guardará as informações do usuario na sessão, Abaixo está a configuração deste manageBean no faces-config.xml

<managed-bean>
        <managed-bean-name>SessionUsuario</managed-bean-name>
        <managed-bean-class>seuPackage.SessionUsuario</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Beleza, depois disso vc já tem sua classe contendo as informaçoes necessarias que ficaram na session, juntamente com a configuração deste ManageBean no seu faces-config.xml.

Agora é só usar esta classe, como o exemplo abaixo faz:

public class UsuarioMB{

	public UsuarioMB(){
	}

	public void setaUsuarioNaSessao(){
		//pega a sessao do usuario
		SessionUsuario session = this.getSessionUsuario();
		
		//pega os valores da sessão
		Integer idUsuario = session.getIdUsuario();
		String nomeUsuario = session.getNomeUsuario();
		
		//seta os valores da sessão
		session.setIdUsuario(2);
		session.setNomeUsuario("Fulano de Tal");
	}

	//este método pega as objetos e seus valores contidos na sessão 
	protected SessionUsuario getSessionUsuario() {
		return (SessionUsuario) getBean("SessionUsuario");
	}
}

Pronto…Essa classe UsuarioMB é o seu ManageBean, que vc configura no seu faces-config normalmente, com scopo request…
Lembrando que essa classe SessionUsuario, pode ser usada em qualquer ManageBean, pois vc coloca os dados na sessão. Sendo que para utiliza-la é sempre necessario criar um método como o getSessionUsuario() criado no exemplo, para que os dados possam ser persistentes.

Fui

obrigado pessoal, consegui fazer com ajuda de vcs, porém achei que o que me ajudaram resolveria um problema conjunto, mas o outro não resolveu!

Quando eu loguei fiz tudo certinho, mas tem um formulário pra editar os dados, como o bean está na sessão, achei que o formulário iria vir com os dados do usuário pra ele editar o que quiser, mas o formulário vem sempre em branco, como faço, podem me ajudar.

é só voce setar o valor dos seus objetos com os caras da sessão, ou colocar a propriedade binding do seu componente, apontando pros valores da sessão. Poderá tambem criar um método que inicia sempre que a pagina for aberta, onde neste método vc atribuirá para os valores de seus componentes, os respectivos valores da sessão

E ai pessoal blz,

Bom gostaria de uma pequena ajuda hehehe,
preciso fazer uma calculadora, minhas dificuldades são:

  • fazer com que o botão exemplo: value"1" da minha jsp seja lida na minha Servlet e concatenar,
    quando eu apertar o operador “+” ler os primeiros numeros dos botões que eu acionei e somar com os proximos numeros, e quando apertar o “=” mostrar o resultado, Obs: tantos faz fazer as contas na servlet ou em uma Bean(que teoricamente seria o mais correto), mas sem problemas…

se alguem puder me dar uma ajuda …VLW ai questão pra eu ganhar um emprego …heheheheh

Abraços…