To tentando pegar o usuario logado e depois alterar a senha do tal usuario…
Estou usando 2 classes p pegar esse usuario, as classe sao: ContextoBean e ContextoUtil.
To utuziliando o metodo buscarPorLogin(consulta hql) depois eu chamo o metodo atualizarSenha p fazer o update no objeto
encontrado pelo metodo buscarPorLogin… Meu problema eh: Eu nao estou acertando fazer a chamada desses 2 metodos…
Vou colar as classes aqui p ver se vcs podem me ajudar com esse problema…
...
public void atualizar(Usuario usuario) {
if (usuario.getPermissao() == null || usuario.getPermissao().size() == 0) {
Usuario usuarioPermissao = this.carregar(usuario.getCodigo()); this.session.update(usuario);
usuario.setPermissao(usuarioPermissao.getPermissao());
this.session.evict(usuarioPermissao);
}
}
public Usuario buscarPorLogin(String login) {
String hql = "select u from Usuario u where u.login = :login";
Query consulta = this.session.createQuery(hql);
consulta.setString("login", login);
//TODO mostrar primeiramente com o list e depois apresentar o uniqueResult
return (Usuario) consulta.uniqueResult();
}
...
public void salvar(Usuario usuario) {
this.session.save(usuario);
}
UsuarioBean
public String salvar() {
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
SetorRN setorRN = new SetorRN();
UsuarioRN usuarioRN = new UsuarioRN();
this.usuario.setSetor(setorRN.buscarPorNome(this.setor));
usuarioRN.salvar(this.usuario);
return "this.destinoSalvar";
}
//estou tendo problemas com o metodo abaixo... N sei como vou fazer a chamada do metodo
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
//Nao estou acertando fazer a chamada do metodo...
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.buscarPorLogin(contextoBean.getUsuarioLogado().getLogin());
return "this.destinoSalvar";
}
Entao pessoal, estou com serias dificuldades nessa parte…
Sou novo em desenvolvimento web, estou meio perdido com isso.
Espero q vcs possam me ajudar. Valeu
Faz tempo que eu nao trabalho com JSF, então posso estar falando besteira, mas o seu action do seu commandButton nao precisa ser action="#{usuarioBean.atualizarSenha}" ?
Sim sim, correto… Meu problema eh qnd for chamar a consulta buscarPorLogin e passar os parâmetros.
Sei q tem q ter um setSenha fazer um update no usuairo…
No meu metodo atual ja tem o #{} no atualizarSenha, acabei de editar aki no post tb.
Entendeu a minha dificuldade ? Eh na chamada da consulta + o tal setSenha… eh isso q n sei fazer direito !
Vou colocar o atualizarSenha aki e na parte q eu to tendo dificuldade eu vou colocar o //
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
//Nao estou acertando fazer a chamada da consulta + colocar o setSenha...
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.buscarPorLogin(contextoBean.getUsuarioLogado().getLogin());
return "this.destinoSalvar";
}
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
UsuarioRN usuarioRN= new UsuarioRN();
Usuario usuarioLogado=usuarioRN.buscarPorLogin(contextoBean.getUsuarioLogado().getLogin());
this.usuario.setSenha(senha);
usuarioRN.salvar(usuarioLogado);
return null;
}
Mudei o metodo… Mas sei q tem algo errado na passagem de parâmetros…
Ta dando esse erro:
java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
at javax.faces.component.UICommand.broadcast(UICommand.java:311)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:310)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at requisicao.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
at requisicao.web.UsuarioBean.atualizarSenha(UsuarioBean.java:122)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
… 52 more
E ai blz, tenta fazer as correções abaixo para ver ser resolve.
crie um metodo atualizar
public void atualizar(Usuario usuario) {
this.session.update(usuario);
}
E altere seu método atualizarSenha
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
UsuarioRN usuarioRN= new UsuarioRN();
//String senha = this.usuario.getSenha(); o erro NullPointerException deve ser aqui
// o certo não seria pegar a senha do usuario logado, algo assim como abaixo
String senha = contextoBean.getUsuarioLogado().getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
//aqui vc chama o método atualizar que vc criou setando o usuario logado
usuarioRN.atualizar(contextoBean.getUsuarioLogado());
return null;
}
[quote=aprendizweb]E ai blz, tenta fazer as correções abaixo para ver ser resolve.
crie um metodo atualizar
public void atualizar(Usuario usuario) {
this.session.update(usuario);
}
E altere seu método atualizarSenha
[code]
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
UsuarioRN usuarioRN= new UsuarioRN();
//String senha = this.usuario.getSenha(); o erro NullPointerException deve ser aqui
// o certo não seria pegar a senha do usuario logado, algo assim como abaixo
String senha = contextoBean.getUsuarioLogado().getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
//aqui vc chama o método atualizar que vc criou setando o usuario logado
usuarioRN.atualizar(contextoBean.getUsuarioLogado());
return null;
}
[/code][/quote]
E ai meu querido, blz ?
Eu ja tenho o metodo atualizar… Na verdade ele ta dentro do metodo salvar…
Contudo testei daquela forma que descrevi criando um metodo atualizar(neste caso outro com um novo nome) e funcionou de boa![/quote]
Vou criar outro metodo p ele fazer o update… Se for olhar deireito, o metodo salvar q ta nesse Bean eh exclusivo p o botao salvar da tela de usuario…
ele pega o codigo do setor na tabela setor e coloca esse codigo na tabela usuario… n tem pq eu chamar esse “salvar” p dar update na senha…
Contudo testei daquela forma que descrevi criando um metodo atualizar(neste caso outro com um novo nome) e funcionou de boa![/quote]
Meu querido, fiz exatamente o q vc postou… Qnd eu clico no botao q chamar o metodo"atualizarSenha" a tela pisca…
isso acontece qnd eu uso o Usuario usuarioLogado = usuarioRN.buscarPorLogin(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser());
Eu coloquei um System.out.println(Usuario usuarioLogado = usuarioRN.buscarPorLogin(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser())
p ver o q ele retorna, ele retornou isso: requisicao.usuario.Usuario@6d109613
Qnd eu uso o contextoBean.getUsuarioLogado().getLogin()); aquele erro continua…
Vou colar o codigo aqui p ver se v pode me ajudar:
UsuarioBean
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
/*
UsuarioRN usuarioRN = new UsuarioRN();
Usuario usuarioLogado = usuarioRN.buscarPorLogin(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser());
System.out.println(usuarioLogado);
usuarioRN.atualizar(usuarioLogado);
return null;
}
------------------------------------------------
public String atualizar(){
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.atualizar(this.usuario);
return null;
}
E ai Blz,!
Então ele retorna requisicao.usuario.Usuario@6d109613 devido seu objeto usuarioLogado ser do tipo Usuario, para vc retorna o nome do usuario ou o login que são do tipo String vc deveria fazer algo assim:
Estancia seu contextoBean e declare os get e set no seu UsuarioBean
private ContextoBean contexto = new ContextoBean();
gets e sets..
ai seu metodo alterarSenha ficaria assim, sem a necessidade do buscarporlogin:
[code]public String atualizarConta(){
FacesContext context = FacesContext.getCurrentInstance();
String senha = contexto.getUsuarioLogado().getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
FacesMessage.SEVERITY_WARN, "Senha do Usuário",
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
} else {
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.atualizar(contexto.getUsuarioLogado());
String login = this.contexto.getUsuarioLogado().getLogin();
System.out.println("Login: "+login);
}
return null;
}[/code]
[quote=aprendizweb]E ai Blz,!
Então ele retorna requisicao.usuario.Usuario@6d109613 devido seu objeto usuarioLogado ser do tipo Usuario, para vc retorna o nome do usuario ou o login que são do tipo String vc deveria fazer algo assim:
Estancia seu contextoBean e declare os get e set no seu UsuarioBean
private ContextoBean contexto = new ContextoBean();
gets e sets..
ai seu metodo alterarSenha ficaria assim, sem a necessidade do buscarporlogin:
[code]public String atualizarConta(){
FacesContext context = FacesContext.getCurrentInstance();
String senha = contexto.getUsuarioLogado().getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
FacesMessage.SEVERITY_WARN, "Senha do Usuário",
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
} else {
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.atualizar(contexto.getUsuarioLogado());
String login = this.contexto.getUsuarioLogado().getLogin();
System.out.println("Login: "+login);
}
return null;
}[/code]
apenas copie e cole para testa.[/quote]
Fiz exatamente o q vc flw… a unica acoisa q aconteceu foi aparecer na tela: Senha do usuario.
No console ele nao retornou o login do ususario…
Eu consegui retornar o login do usuario, so q ta dando um erro:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [requisicao.usuario.Usuario#1]
Ele fala q um objeto diferente com o mesmo identificador ja esta associado nessa sessao !
Vou colar o metodo aqui:
public String atualizarSenha(){
ContextoBean contextoBean = ContextoUtil.getContextoBean();
FacesContext context = FacesContext.getCurrentInstance();
String senha = this.usuario.getSenha();
if (!senha.equals(this.confirmarSenha)) {
FacesMessage facesMessage = new FacesMessage(
"A senha não foi confirmada corretamente");
context.addMessage(null, facesMessage);
return null;
}
UsuarioRN usuarioRN = new UsuarioRN();
usuarioRN.buscarPorLogin(contextoBean.getUsuarioLogado().getLogin());
System.out.println(contextoBean.getUsuarioLogado().getLogin());
this.usuario.setSenha(senha);
usuarioRN.atualizar(contextoBean.getUsuarioLogado());
return null;
}
Corrigi o erro acima… coloquei um session.clear(); antes do this.session.update(usuario);
Agora nao ta dando erro nenhum, mas a senha nao ta sendo atualizada.
Ele ta retornando no console o nome do usuario, mas nada de fazer update na senha :evil: