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.
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.
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 = )
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?
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 = )
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";
}
}
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());
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 = )