[RESOLVIDO] - Como recuperar os valores do Bean Gerenciado?

O formulário é esse (resumido):

           <p:inputText id="nomeTxt" value="#{CadastradorB.nome}"  />
           <p:keyboard id="senhaTxt" password="true" value="#{CadastradorB.senha}" />
           <p:commandButton id="loginBtn" value="Enviar" action="#{CadastradorC.login}" ajax="false" />

Ao setar value para os atributos nome e senha do meu bean gerenciado, automaticamente ele instancia um novo bean?

E no meu controlador, ao invocar na action CadastradorC.login, como faço para recuperar os atributos nome e senha do bean CadastradorB?

Olá javadalberto

Basicamente vc tem na sua classe CadastroB duas propriedades, “nome” e “senha” correto?
Quando você coloca no seu value “CadastroB.nome” o seu Bean é instanciado e o valor que você digitar será atribuido à propriedade “nome” da sua classe.

Pergunta: Por que você tem uma classe “CadastradorC” com o método para o login? Por que o método não poderia estar na própria classe “CadastroB”?

Outra opção é você ter na sua classe CadastradorC uma referencia para a classe CadastradorB.

Outra opção ainda é você trabalhar com os escopos do JSF e dentro da CadastradorC buscar os dados da CadastradorB.

Abraços!

AlexandreGama, obrigado pela ajuda. Estou um pouco desanimado, estou quase decidindo refazer todo o projeto à moda antiga, com JSP e Servlets somente.

Estou tendo um pouco de trabalho com o JSF.

Vamos as dúvidas.

Esse CadastradorC é o Controlador, e ele é um bean gerenciado. No método login dele, ele deve checar se existe um nome e senha informados naquele formulário de login. Se ele achar o nome e o login no banco MySQL, ele retorna a String sucesso, que o JSF encaminhará para a página principal.

Porém, não sei como pegar os valores passados ao Bean CadastradorB no meu controlador.

Talvez não seja a melhor técnica, porém é o que posso fazer com o que sei, que é muito pouco.

P.S. Tenho minhas classes DAO e Fábrica de Conexões, nem tudo foi feito fora dos padrões. :slight_smile:

Opa espero ajudar! = )

Não desanima, JSF é bem legal pra muita coisa = )
Acho que entendi a sua dúvida e vou tentar simplificá-la.
Você tem um bean com um método que valida se o usuário existe ou não no sistema, é isso?

Você poderia ter um bean simples, com escopo de Request mesmo com as propriedades login e senha não?

@ManagedBean
public class LoginBean {
   private String login;
   private String senha;
   //getters e setters das duas propriedades para o JSF populá-las (pelo setter)

   public void login() {
       if(usuarioDAO.existe(login, senha))  {
           return "pagina-sucesso";
       }
   }
}

Quando voce preencher os seus campos no formulário o JSF vai atribuir os valores preenchidos e seu LoginBean já estará com o Login e Senha
quando você acionar o método “login” .

Claro que dei um exemplo bem tosco e existem formas melhores, mas foi só pra exemplificar = )

Seria essa a dúvida?

Abraços!

Sim, é mais ou menos essa a dúvida. Em 99% dos tutoriais na web, eles ensinam checar o login e senha numa classe Java simples, com texto à mostra, mas se esquecem que numa aplicação real, os dados estarão em um banco de dados.

Quando eu usava Servlet puro e simples, eu tinhas funções bem claras e separadas. Mas agora com o JSF controlando os ciclos, estou perdido ainda.

Eu vou testar essa dica e continuar nos estudos aqui, qualquer coisa não se incomoda se eu vier com mais perguntas? :slight_smile:

Desde já, obrigado!

pode também usar a anotação managedProperty, ou o seguinte código (tinha um outro também, que interpretava EL, mas não estou ele aqui);

FacesContext facesContext = FacesContext.getCurrentInstance(); SystemUserController controller = (SystemUserController) facesContext.getApplication().getELResolver(). getValue(facesContext.getELContext(), null, "systemUserController");

Sem problemas @javadalberto
Tenta e é só postar as dúvidas = )

Mas pode fazer o processo simples mesmo: Classe Bean com a anotação @ManagedBean, as propriedades e o método de login validando essas propriedades.

Abraços!

Opa @evefuji!

Funcionaria desta forma também, trabalhando com o Context mas neste caso eu ficaria com a solução mais simples onde o Bean já é preenchido.
Mas no caso de outra classe tratando da requisição, realmente trabalhar com o Context facilita = )

Abraços!

Valeu AlexandreGama, pela dica. Está funcionando o que eu queria. Deixo a solução aí para todos verem. Agora estou pesquisando como gerencio sessões com o JSF, se é que é possível. Eu fazia isso antes com JSP e Servlets puros + HttpSession.

public class LoginBean {
    
   private String usuario;
   private String senha;
   
   // getters e setters omitidos.
      
    public String login() throws Exception {
        
       CadastradorDAO dao = new CadastradorDAO(); 
       CadastradorBean cadastrador = new CadastradorBean();
       cadastrador = dao.procurarCadastrador(usuario, senha);
       if(cadastrador != null)
          return "sucesso";
       return "fracasso";
     
    }

}

Obrigado pela paciência, e bom estudo para todos!

se for te ajudar um pouco, segue o código que menciona.

            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().
                getExternalContext().getSession(true);
            current = usuario; // aqui só para saber o que é current
            session.setAttribute("systemUser", current.getId().intValue());

evefuji, valeu pela ajuda.

Minhas páginas são todas xhtml, tendo em vista que são o padrão do Netbeans para usar PrimeFaces.

Nessas páginas, não consigo injetar código Java puro, de modo que não posso ter acesso ao HttpSession.

Eu preciso configurar algo nessas páginas xhtml?

Fala !javadalberto

Na verdade esse código do @evefuji é para ser usado dentro do seu próprio Bean mesmo e não na página xhtml.
Você pode pegar o HttpRequest tranquilamente no seu Bean = )

Abraços!