Fala galera, boa noite dependendo de quando voce ta vendo esse post, bem.. esse post como de custume nao vai ter tanta teoria, praticamente só pratica.
A ídeia é fazer uma telinha de login com o JSF2 puro. Para verificar se o usuario existe, utilizaremos o JPA2
Então, let’s go!
Caso nunca tenha usado JPA2, recomendo esse post mais antigo
http://faroljava.wordpress.com/2010/08/13/jpa2-crud-generics-parte-1/
O nosso modelo de usuario
package br.com.lafleur.modelo.usuario;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Usuario {
@Id @GeneratedValue
private int id;
private String login;
private String senha;
//Getters and Setters
}
Nossa JPAUtil
package br.com.lafleur.infra;</pre>
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("jsf2");
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
Nosso UsuarioDAO, nesse caso, o unico metodo que ele vai ter, é para de acordo com o login e senha passados, retornar um boolean se o usuario existe ou não.
package br.com.lafleur.dao.usuario;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.lafleur.infra.JPAUtil;
import br.com.lafleur.modelo.usuario.Usuario;
public class UsuarioDAO {
public boolean existe(Usuario usuario) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Query query = em
.createQuery("from Usuario u where u.login = :pLogin and u.senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
boolean encontrado = !query.getResultList().isEmpty();
em.getTransaction().commit();
em.close();
return encontrado;
}
}
Agora nosso Managed Bean,bem, o managed bean, serve para fazer o binding(conexao/junção) entre nossa pagina xhtml e o nosso managed bean, para acessarmos o modelo, precisamos de uma instancia de usuario dentro desse managed bean, atravez dele, settamos o login e o password e chamaremos o metodo de autentificação do UsuariDao.
package br.com.lafleur.modelo.mb;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import br.com.lafleur.dao.usuario.UsuarioDAO;
import br.com.lafleur.modelo.usuario.Usuario;
@SessionScoped
@ManagedBean(name="loginBean")
public class LoginBean {
private Usuario usuario = new Usuario();
public Usuario getUsuario() {
return usuario;
}
public String efetuaLogin() {
UsuarioDAO dao = new UsuarioDAO();
boolean loginValido = dao.existe(usuario);
if (loginValido){
return "mainpage?faces-redirect=true";
}
else {
usuario = new Usuario();
return "login";
}
}
}
Um pouco sobre as annotations:
A annotation @ManagedBean é nescessária para podermos justamente fazer esse binding com a pagina xhtml, o atributo name nao é nescessário ja que com a annotation, ja se converte o nome da classe usando carmelCase. A annotation @SessionScoped, serve para jogar o objeto na sessão sendo assim, podemos utiliza-la em diversas páginas diferentes.
Um pouco sobre o ManagedBean:
Criamos a instancia do modelo, para acessarmos os metodos do modelo, também é nescessário criar um get do tipo da instancia.
E criamos um metodo com o retorno uma string pra fazer o redirecionamento para outras paginas, ou a mesma, dependendo do retorno do metodo.
Agora vamos para a pagina xhtml
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view contentType="text/html"/>
<h:head>
<title>Sistema de Cadastro de Usuarios</title>
</h:head>
<h:body>
<h:form>
<legend>Login do Sistema</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Login:" for="nome" />
<h:inputText id="nome" value="#{loginBean.usuario.login }" />
<h:outputLabel value="Password:" for="password" />
<h:inputSecret id="password" value="#{loginBean.usuario.senha}" />
<h:commandButton action="#{loginBean.efetuaLogin }" value="Logar" />
</h:panelGrid>
</h:form>
</h:body>
</html>
<pre>
Reparem no value do <h:command>, <h:input's>, eles utilizam a expression language do JSF, e chamam o managed bean loginBean, acessando o usuario, e apartir do usuario, o login e a senha, e no caso do <h:commandButton, a action dele.. chama o metodo do managedBean efetuaLogin, esse metodo chama o metodo do UsuarioDAO para verificar se o usuario existe no banco ou não, caso ele exista, ele redireciona para uma xhtml chamada mainpage, caso nao.. redireciona para a index.xhtml
Vamos a mainpage.xhtml
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view contentType="text/html"/>
<h:head>
<title>Sistema de Cadastro de Usuarios</title>
</h:head>
<h:body>
<h:form>
<legend>Usuario Logado</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Nome: " />
<h:outputText id="nome" value="#{loginBean.usuario.login}" />
</h:panelGrid>
</h:form>
</h:body>
Pronto, reparem que a mesma EL é usada para mostrar o nome do usuario, bem legal né?
Bem por hoje é só.Abração galera, proximo post sobre jsf2, vou usar o primefaces e ajax do próprio jsf
Vlw o/
Não se esqueçam, Jesus love U <3
Gostei muito do exemplo, estou aprendendo JSF ja na versão 2.0 e este artigo abordou justamente o que eu estava precisando para sanar algumas dúvidas.
Parabens !!!
Fala Danilo, blz cara??
que bom que consegui te ajudar.. o teu comentário até deu um animo pra voltar a postar com frequencia
qlqr coisa estamos ae
jesus loves u
Só faltou ter um interceptor pra me ajudar ^^