[RESOLVIDO]ManagedBean session

Bom dia,

surgiu uma duvida agora quanto ao Managedbean session, estou fazendo um site de uma locadora hipotética (apenas com fins de estudos), aonde o usuário tem a possibilidade de se logar para poder reservar filmes.
A questao é a seguinte, quando o usuario se loga ele vai para uma pagina aonde aparece que ele esta logado (com o nome do usuario) e a opção de deslogar. Ambas as opções são feitas através do mesmo managed bean, porem quando chamo a opção deslogar diz que " The requested resource (/zamba/usuarioManagedBean.deslogar) is not available.".

os codigos

a tela que chama o deslogar

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:p="http://primefaces.org/ui" 
      xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Locadora do Zamba</title>
</h:head>
<h:body>
  <p:breadCrumb>
    <p:menuitem value="categories" url="principal2.xhtml" />
    <p:menuitem value="Drama" url="drama.xhtml" />
    <p:menuitem value="Romance" url="romance.xhtml"/>
    <p:menuitem value="Ficção" url="ficcao.xhtml" />
    <p:menuitem value="Terror" url="terror.xhtml" />
    <p:menuitem value="Suspense" url="suspense.xhtml" />
    <p:menuitem value="Deslogar-se" url="#{usuarioManagedBean.deslogar}" />
  </p:breadCrumb>
  <h:outputText value="Usuario:" />
  <h:outputText value="#{usuarioManagedBean.usuario.login}" />
  <h:outputText value=" esta conectado" />
  <center>
    <p:panel header="Promoção do dia:" footer="Aproveite!!!">
      <h:outputText value="Alugue dois filmes de qualquer genero e leve uma diaria de um terceiro gratis!" />
    </p:panel>
     <h:graphicImage library="resources" name="locadora.jpg" />
  </center>   
</h:body>
</html>

O managedBean em questão

package pojo;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import pojo.Usuario;
import javax.faces.application.FacesMessage;

@ManagedBean
@SessionScoped

public class UsuarioManagedBean {
	
	private Usuario usuario;
	private Validador validador;

	public UsuarioManagedBean(){
		usuario=new Usuario();
	}
	
	public Usuario getUsuario(){
		return usuario;
	}
	
	
	public void setUsuario(Usuario usuario){
		this.usuario=usuario;
	}

	public String logar(){
		validador=new Validador();
		if(validador.validar(usuario.getLogin(),usuario.getSenha())){
			System.out.println("Encontrou o usuario");
			return "OK";
		}
		FacesMessage msg=new FacesMessage("Usuario/senha invalidos");
		FacesContext.getCurrentInstance().addMessage("form", msg);
		return "";
	}
	public String deslogar(){
		usuario=new Usuario();
		return "LOGOUT";
	}
}

obrigado

Update, o erro agora é

javax.el.PropertyNotFoundException: /principal2.xhtml @19,76 url="#{usuarioManagedBean.deslogar}": Property ‘deslogar’ not found on type pojo.UsuarioManagedBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(Unknown Source)

url="#{usuarioManagedBean.deslogar}"

Não seria pq você está chamando um método como se fosse uma URL?

[quote=kmunga]Update, o erro agora é

javax.el.PropertyNotFoundException: /principal2.xhtml @19,76 url="#{usuarioManagedBean.deslogar}": Property ‘deslogar’ not found on type pojo.UsuarioManagedBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(Unknown Source)[/quote]

Meu querido esta acusando um erro na linha 19…

pelo que percebi tente substituir
isso:

 <p:menuitem value="Deslogar-se"url="#{usuarioManagedBean.deslogar}" />  

por isso:

 <p:menuitem value="Deslogar-se" action="#{usuarioManagedBean.deslogar}" />  

Bem sou iniciante com jsf, porém acredito que utilizar apenas url sirva para redirecionar para o endereço passado, ao contrário de action que serve para executar regras de negócio e também redireciona, claro que você terá de configurar seu navigation-rule. Posso estar errado, porém o erro é proveniente do uso de url, quando deveria ser utilziado uma action, pois você esta acessado um método que irá executar uma lógica e depois retornar uma string, que baseado no seu navigation-rule poderá lhe redirecionar para algum lugar…

Uma dica ao invés de retornar return "", retorne apenas

return null

:slight_smile:

Realmente, um erro meu, mas não deu certo com o action, deu esse erro" javax.faces.FacesException: MenuItem must be inside a form element". Acredito que seja devido ao primefaces, irei pesquisar mais para ver se encontro a solução.

[quote=kmunga]Realmente, um erro meu, mas não deu certo com o action, deu esse erro" javax.faces.FacesException: MenuItem must be inside a form element". Acredito que seja devido ao primefaces, irei pesquisar mais para ver se encontro a solução.[/quote]Cara, desculpe a honestidade…

Apenas leia a mensagem de erro.

Se você não sabe inglês, tente traduzir no google translate. Pois essa mensagem é ultra clara.

resolvido, valeu :slight_smile:

Acredito que a sua solução foi colocar o menu dentro de um form correto?
Acho que é bom mencionar a solução pois quem tiver um problema semelhante a esse, poderá ver também a solução :slight_smile: